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();}
Навигация
Перейти к полной версии