ADN Club > Revit API

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

(1/1)

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




--- Код - C# [Выбрать] ---  XYZ p1z = new XYZ(-5, 5, 5);            XYZ p2z = new XYZ(5, 5, 5);            XYZ p3z = new XYZ(-5, 5, 10);            XYZ p4z = new XYZ(5, 5, 10);                                    XYZ cutVecZ = new XYZ(0, 1, 0);         using (Transaction t = new Transaction(doc, "Refplanes"))            {                    t.Start();                                        refplane1 = doc.FamilyCreate.NewReferencePlane(p1z, p2z, cutVecZ, uidoc.ActiveGraphicalView);                    refplane2 = doc.FamilyCreate.NewReferencePlane(p3z, p4z, cutVecZ, uidoc.ActiveGraphicalView);                    t.Commit();               }                Line lin = Line.CreateBound(p1z, p3z);                ReferenceArray ra = new ReferenceArray();                ra.Append(refplane1.GetReference());                ra.Append(refplane2.GetReference());                 using (Transaction t = new Transaction(doc, "Dimension"))            {                                t.Start();                               var dim3 = doc.FamilyCreate.NewLinearDimension(uidoc.ActiveGraphicalView, lin, ra);                t.Commit();            }

Александр Игнатович:
Что-то у тебя какая-то путаница refplane1, refplane6, ra, ra3. Проверь, вроде, должно работать, кстати, при создании размеров можно указывать неограниченные линии, т.е. указать

--- Код - C# [Выбрать] ---lin = Line.CreateUnbound(p1z, XYZ.BasisZ);
Читается проще, чем в голове прокручивать, куда же направлен твой размер

wingsdraw:
Код подкорректировал, но по прежнему ошибка появляется. Может с видом что-то не так и нужно поменять с uidoc.ActiveGraphicalView на что-то другое ?

Александр Игнатович:
Лень было VS открывать и создавать проект, накидал код для Revit Python Shell:

--- Код - Python [Выбрать] ---p1z = XYZ(-5, 5, 5)p2z = XYZ(5, 5, 5)p3z = XYZ(-5, 5, 10)p4z = XYZ(5, 5, 10)        cutVecZ = XYZ(0, 1, 0) tx = Transaction(doc, "ss")tx.Start()refplane1 = doc.FamilyCreate.NewReferencePlane(p1z, p2z, cutVecZ, uidoc.ActiveGraphicalView)refplane2 = doc.FamilyCreate.NewReferencePlane(p3z, p4z, cutVecZ, uidoc.ActiveGraphicalView) doc.Regenerate() lin = Line.CreateBound(p1z, p3z) ra3 = ReferenceArray();ra3.Append(refplane1.GetReference())ra3.Append(refplane2.GetReference())  doc.FamilyCreate.NewLinearDimension(uidoc.ActiveGraphicalView, lin, ra3) tx.Commit()
Вроде, работает, но тут надо понимать, что вид uidoc.ActiveGraphicalView должен быть разрез или фасад

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



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

Навигация

[0] Главная страница сообщений

Перейти к полной версии