Создание размеров на 3D виде

Автор Тема: Создание размеров на 3D виде  (Прочитано 5196 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Всем здравствуйте.
Пытаюсь создать размеры на 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.  

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Создание размеров на 3D виде
« Ответ #1 : 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)

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Создание размеров на 3D виде
« Ответ #2 : 30-07-2018, 11:59:20 »
Проблема на самом деле сложнее, чем кажется. Вот код, который вроде как создает размер:
Извините, вам запрещён просмотр содержимого спойлеров.

Проблема в том, что Ревит упорно не позволяет создать размер по концам одного отрезка. Точнее - размер создается, но с длиной -304,8 и не появляется на виде. При этом в списке References у него неправильные ссылки, хотя подаются при создании правильные

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Создание размеров на 3D виде
« Ответ #3 : 30-07-2018, 12:45:20 »
Опубликовал статью http://adn-cis.org/sozdanie-razmerov-trub.html

Принципиально, оно близко к коду Александа Пекшева, но не кидает все размеры на 3D-виде в его SketchPlane. Также образмеривает элементы с уклоном (кроме тех, которые перпендикулярны рабочей плоскости вида), показано как отключить.

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Создание размеров на 3D виде
« Ответ #4 : 30-07-2018, 12:51:02 »
Спасибо всем большое, сейчас буду разбираться)

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Создание размеров на 3D виде
« Ответ #5 : 30-07-2018, 12:56:27 »
Александр Игнатович, про "фишку" с GraphicsStyle не знал. Приму во внимание и возьму на вооружение)