Неправильное направление размера 'Invalid direction of dimension'

Автор Тема: Неправильное направление размера 'Invalid direction of dimension'  (Прочитано 4287 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 23
  • Карма: 0
При попытке создать вертикальный  размер между опорными плоскостями (в редакторе семейств) появляется ошибка 'Invalid direction of dimension'.
Опорные плоскости по оси Z создаются, но дальше программа, переходя к функции NewLinearDimension выдает ошибку.



Код - C# [Выбрать]
  1.   XYZ p1z = new XYZ(-5, 5, 5);
  2.             XYZ p2z = new XYZ(5, 5, 5);
  3.             XYZ p3z = new XYZ(-5, 5, 10);
  4.             XYZ p4z = new XYZ(5, 5, 10);
  5.                        
  6.             XYZ cutVecZ = new XYZ(0, 1, 0);
  7.  
  8.         using (Transaction t = new Transaction(doc, "Refplanes"))
  9.             {
  10.                     t.Start();                    
  11.                     refplane1 = doc.FamilyCreate.NewReferencePlane(p1z, p2z, cutVecZ, uidoc.ActiveGraphicalView);
  12.                     refplane2 = doc.FamilyCreate.NewReferencePlane(p3z, p4z, cutVecZ, uidoc.ActiveGraphicalView);
  13.                     t.Commit();  
  14.             }
  15.                 Line lin = Line.CreateBound(p1z, p3z);
  16.                 ReferenceArray ra = new ReferenceArray();
  17.                 ra.Append(refplane1.GetReference());
  18.                 ra.Append(refplane2.GetReference());
  19.  
  20.                 using (Transaction t = new Transaction(doc, "Dimension"))
  21.             {                
  22.                 t.Start();              
  23.                 var dim3 = doc.FamilyCreate.NewLinearDimension(uidoc.ActiveGraphicalView, lin, ra);
  24.                 t.Commit();
  25.             }
« Последнее редактирование: 18-11-2021, 17:08:03 от wingsdraw »

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Что-то у тебя какая-то путаница refplane1, refplane6, ra, ra3. Проверь, вроде, должно работать, кстати, при создании размеров можно указывать неограниченные линии, т.е. указать
Код - C# [Выбрать]
  1. lin = Line.CreateUnbound(p1z, XYZ.BasisZ);

Читается проще, чем в голове прокручивать, куда же направлен твой размер

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

  • ADN OPEN
  • Сообщений: 23
  • Карма: 0
Код подкорректировал, но по прежнему ошибка появляется. Может с видом что-то не так и нужно поменять с uidoc.ActiveGraphicalView на что-то другое ?

Отмечено как Решение wingsdraw 18-11-2021, 18:01:50

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Лень было VS открывать и создавать проект, накидал код для Revit Python Shell:
Код - Python [Выбрать]
  1. p1z = XYZ(-5, 5, 5)
  2. p2z = XYZ(5, 5, 5)
  3. p3z = XYZ(-5, 5, 10)
  4. p4z = XYZ(5, 5, 10)
  5.        
  6. cutVecZ = XYZ(0, 1, 0)
  7.  
  8. tx = Transaction(doc, "ss")
  9. tx.Start()
  10. refplane1 = doc.FamilyCreate.NewReferencePlane(p1z, p2z, cutVecZ, uidoc.ActiveGraphicalView)
  11. refplane2 = doc.FamilyCreate.NewReferencePlane(p3z, p4z, cutVecZ, uidoc.ActiveGraphicalView)
  12.  
  13. doc.Regenerate()
  14.  
  15. lin = Line.CreateBound(p1z, p3z)
  16.  
  17. ra3 = ReferenceArray();
  18. ra3.Append(refplane1.GetReference())
  19. ra3.Append(refplane2.GetReference())
  20.  
  21.  
  22. doc.FamilyCreate.NewLinearDimension(uidoc.ActiveGraphicalView, lin, ra3)
  23.  
  24. tx.Commit()

Вроде, работает, но тут надо понимать, что вид uidoc.ActiveGraphicalView должен быть разрез или фасад

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

  • ADN OPEN
  • Сообщений: 23
  • Карма: 0
Отлично, код работает! Спасибо за направление. Чтобы находясь на опорном уровне выставить размер на фасаде или разрезе нужно
указать соответствующий вид. Вот решение для всех кто столкнулся с чем-то подобным.


Код - C# [Выбрать]
  1. Element FindElement(Autodesk.Revit.DB.Document docum, Type targetType, string targetName)
  2. {
  3. return new FilteredElementCollector(doc).OfClass(targetType).First<Element>(e => e.Name.Equals(targetName));
  4. }
  5.  
  6. View pView = FindElement(doc, typeof(View), "Назад") as View;
  7.  
  8. using (Transaction t = new Transaction(doc, "Dimension"))
  9. {
  10. t.Start();
  11. var dim = doc.FamilyCreate.NewLinearDimension(pView, lin, ra);
  12. t.Commit();
  13. }