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

ADN Club => Revit API => Тема начата: user32 от 30-07-2018, 10:40:39

Название: Создание размеров на 3D виде
Отправлено: user32 от 30-07-2018, 10:40:39
Всем здравствуйте.
Пытаюсь создать размеры на 3д виде между трубами, но никак не получается, выдает ошибку "invalid number of reference".
Подскажите пожалуйста, где ошибка?
Вот мой код:
Код - C# [Выбрать]
  1.                
  2. public void Create3DDimensions()
  3.                 {
  4.  
  5.                         IEnumerable<Pipe> pipeInView = new FilteredElementCollector(doc, doc.ActiveView.Id).OfCategory(BuiltInCategory.OST_PipeCurves).Select(a=>a as Pipe);
  6.                        
  7.                         foreach (Pipe pipe in pipeInView)
  8.                         {
  9.                                 LocationCurve lp = pipe.Location as LocationCurve;
  10.                                
  11.                                 ReferenceArray refArray = new ReferenceArray();
  12.                                 Reference refPipe1 = lp.Curve.GetEndPointReference(0);
  13.                                 Reference refPipe2 = lp.Curve.GetEndPointReference(1);
  14.                                 refArray.Append(refPipe1);
  15.                                 refArray.Append(refPipe2);
  16.                                 Line newLine =  lp.Curve as Line;
  17.                                
  18.                                 XYZ p1 = new XYZ(newLine.GetEndPoint(0).X,
  19.                                                                         newLine.GetEndPoint(0).Y,
  20.                                                                         newLine.GetEndPoint(0).Z);
  21.                                 XYZ p2 = new XYZ(newLine.GetEndPoint(1).X,
  22.                                                                         newLine.GetEndPoint(1).Y,
  23.                                                                         newLine.GetEndPoint(1).Z);
  24.                                 Line nLine2 = Line.CreateBound(p1, p2);
  25.                                
  26.                                 using (Transaction tr = new Transaction(doc))
  27.                                 {
  28.                                         tr.Start("Create Dimension");
  29.                                         doc.Create.NewDimension(doc.ActiveView, nLine2, refArray);
  30.                                         tr.Commit();
  31.                                 }
  32.                         }
  33.                 }
  34.  
Название: Re: Создание размеров на 3D виде
Отправлено: Александр Игнатович от 30-07-2018, 11:19:09
Утро доброе!

Проблема в том, что lp.Curve.GetEndPointReference на самом деле возвращает null

Reference-ы нужно получать непосредственно из геометрии объекта

Для этого создавая объект Options нужно ему назначить:
Код - C# [Выбрать]
  1. opt.View = doc.ActiveView;
  2. opt.IncludeNonVisibleObjects = true;
  3. opt.ComputeReferences = true;
  4.  

Дальше получаем кривую, которую будем образмеривать:
Код - C# [Выбрать]
  1. var curve = pipe.get_Geometry(opt).OfType<Curve>().First(x => doc.GetElement(x.GraphicsStyleId).GraphicsStyleCategory.Id == new ElementId(BuiltInCategory.OST_PipeCurves))
  2.  

и уже от этой кривой берем curve.GetEndPointReference(0), curve.GetEndPointReference(1)
Название: Re: Создание размеров на 3D виде
Отправлено: Александр Пекшев aka Modis от 30-07-2018, 11:59:20
Проблема на самом деле сложнее, чем кажется. Вот код, который вроде как создает размер:
Извините, вам запрещён просмотр содержимого спойлеров.

Проблема в том, что Ревит упорно не позволяет создать размер по концам одного отрезка. Точнее - размер создается, но с длиной -304,8 и не появляется на виде. При этом в списке References у него неправильные ссылки, хотя подаются при создании правильные
Название: Re: Создание размеров на 3D виде
Отправлено: Александр Игнатович от 30-07-2018, 12:45:20
Опубликовал статью http://adn-cis.org/sozdanie-razmerov-trub.html

Принципиально, оно близко к коду Александа Пекшева, но не кидает все размеры на 3D-виде в его SketchPlane. Также образмеривает элементы с уклоном (кроме тех, которые перпендикулярны рабочей плоскости вида), показано как отключить.
Название: Re: Создание размеров на 3D виде
Отправлено: user32 от 30-07-2018, 12:51:02
Спасибо всем большое, сейчас буду разбираться)
Название: Re: Создание размеров на 3D виде
Отправлено: Александр Пекшев aka Modis от 30-07-2018, 12:56:27
Александр Игнатович, про "фишку" с GraphicsStyle не знал. Приму во внимание и возьму на вооружение)