Размер между точками FamilyInstanсe

Автор Тема: Размер между точками FamilyInstanсe  (Прочитано 3004 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Здравствуйте! Пытаюсь создать размер между точками семейств по примеру как у Таммика https://thebuildingcoder.typepad.com/blog/2014/11/picking-pairs-and-dimensioning-family-instance-origin.html#4
но выдает ошибку Invaid number of reference. Подскажите пожалуйста, в чем ошибка может быть? Спасибо
Код - C# [Выбрать]
  1.                 public void TEEEETTSTSTS()
  2.                 {
  3.                         UIDocument uidoc = this.ActiveUIDocument;
  4.                         Document doc = uidoc.Document;
  5.                         IList<Reference> reference = uidoc.Selection.PickObjects(ObjectType.Element);
  6.                         Options opt = null;
  7.                         opt = new Options();
  8.                         opt.ComputeReferences = true;
  9.                         opt.IncludeNonVisibleObjects = true;
  10.                         ReferenceArray refArray = new ReferenceArray();
  11.                        
  12.                         FamilyInstance firstEl = doc.GetElement(reference[0]) as FamilyInstance;
  13.                         FamilyInstance secEl = doc.GetElement(reference[1]) as FamilyInstance;
  14.                         var pts1 = (firstEl.Location as LocationPoint).Point;
  15.                         var pts2 = (secEl.Location as LocationPoint).Point;
  16.                         refArray.Append(GetReferenceFromFamilyInstance(firstEl,opt));
  17.                         refArray.Append(GetReferenceFromFamilyInstance(secEl,opt));
  18.                         Line line1 = Line.CreateBound(pts1, pts2);
  19.                         using (Transaction tr = new Transaction(doc))
  20.                         {
  21.                                 tr.Start("f");
  22.                                 doc.Create.NewDimension(doc.ActiveView, line1, refArray);
  23.                                 tr.Commit();
  24.                         }
  25.  

Метод, который должен находить reference:
Код - C# [Выбрать]
  1.                 private Reference GetReferenceFromFamilyInstance(FamilyInstance fi, Options opt)
  2.                 {
  3.                         return fi.get_Geometry(opt)
  4.                                 .OfType<Point>()
  5.                                 .Select<Point, Reference>( x => x.Reference )
  6.                                 .FirstOrDefault();
  7.                 }
  8.  


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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Размер между точками FamilyInstanсe
« Ответ #1 : 28-11-2018, 15:09:33 »
В геометрии элементов нет точек. Вот это:
Код - C# [Выбрать]
  1.  private Reference GetReferenceFromFamilyInstance(FamilyInstance fi, Options opt)
  2.                 {
  3.                         return fi.get_Geometry(opt)
  4.                                 .OfType<Point>()
  5.                                 .Select<Point, Reference>( x => x.Reference )
  6.                                 .FirstOrDefault();
  7.                 }
это какая-то лично ваша выдумка.
Вы должны брать отрезки и у них получать конечные точки. Ну наверное отрезки - я не знаю что у вас за элемент.
Причем в ссылке, что вы привели есть комментарий со ссылкой вот сюда - https://forums.autodesk.com/t5/revit-api-forum/endpointreference/td-p/7131328, где как раз и показано как надо делать

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Размер между точками FamilyInstanсe
« Ответ #2 : 28-11-2018, 15:10:04 »
Поизучайте геометрию семейства, как, собственно, в той статье. Есть ли в ней вообще Point-ы, там ниже в статье скрины из RevitLookup-а.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Размер между точками FamilyInstanсe
« Ответ #3 : 28-11-2018, 15:32:23 »
В геометрии элементов нет точек

Есть, но не во всех

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Размер между точками FamilyInstanсe
« Ответ #4 : 28-11-2018, 15:37:50 »
В геометрии элементов нет точек

Есть, но не во всех
Я уже понял по скриншотам в статье, но лично ещё ни разу не встречал. Может просто не приходилось с такими семействами работать. Вот меня и смутил код ТС

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Размер между точками FamilyInstanсe
« Ответ #5 : 28-11-2018, 15:45:34 »
Вообще, с какого-то сервис-пака 2018 версии появилась очень удобная штука, при условии возможности подготовить семейства правильным образом: можно получать по имени опорные плоскости из семейства при условии, что у них в свойстве связь установлено что-то, отличное от "Нет", для программного образмеривания - просто сказка :-)

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Размер между точками FamilyInstanсe
« Ответ #6 : 28-11-2018, 15:49:10 »
Вообще, с какого-то сервис-пака 2018 версии появилась очень удобная штука, при условии возможности подготовить семейства правильным образом: можно получать по имени опорные плоскости из семейства при условии, что у них в свойстве связь установлено что-то, отличное от "Нет", для программного образмеривания - просто сказка :-)
Там есть свои нюансы. Например, это ТОЛЬКО в правильно настроенном семействе работает. На практике - у нас даже БИМ-менеджеры неправильные семейства делают (
Еще нельзя определить ориентацию плоскости - горизонтальная или вертикальная. Повернул колонну и все - не работает. Хотя на это тоже есть лайфхак ))

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Размер между точками FamilyInstanсe
« Ответ #7 : 28-11-2018, 15:54:17 »
ТОЛЬКО в правильно настроенном семействе работает

Это да.

Еще нельзя определить ориентацию плоскости - горизонтальная или вертикальная

А вот это уже нет, пример на Revit Python Shell:
Код - Python [Выбрать]
  1. r = selection[0].GetReferenceByName("<имя опорной плоскости>")
  2.  
  3. tx = Transaction(doc, "temp")
  4. tx.Start()
  5.  
  6. sp = SketchPlane.Create(doc, r)
  7.  
  8. p = sp.GetPlane()
  9.  
  10. o = p.Origin
  11.  
  12. n = p.Normal
  13.  
  14. tx.RollBack()
  15.  
  16. print o, n

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Размер между точками FamilyInstanсe
« Ответ #8 : 28-11-2018, 15:57:07 »
А вот это уже нет, пример на Revit Python Shell
Ну это тоже лайфхак =)) Я использовал другой, но принцип такой-же - создать транзакцию, что-то сделать для проверки, откатиться
Я имел ввиду, что в самом АПИ нет ничего

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Размер между точками FamilyInstanсe
« Ответ #9 : 29-11-2018, 12:56:29 »
Александр Игнатович, что-то мы с вами поболтали, а автор молчит )

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Размер между точками FamilyInstanсe
« Ответ #10 : 29-11-2018, 13:06:40 »
Направление, куда ковырять автору есть, базу знаний пополняем, так что, думаю, всё хорошо. Если вопросы ещё будут, ответим.

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Размер между точками FamilyInstanсe
« Ответ #11 : 29-11-2018, 13:09:06 »
Да, спасибо) я превратился в тихого наблюдателя) Удалось получить линии у семейства, двигаюсь в этом направлении в общем)