Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Khasan Mamaev от 25-02-2018, 22:16:56

Название: AreaLoad Create
Отправлено: Khasan Mamaev от 25-02-2018, 22:16:56
Помогите пожалуйста разобраться с созданием нагрузки по площади, есть три метода из которых меня интересует второй: Autodesk.Revit.DB.Structure.AreaLoad.Create(aDoc, loops, forceVector, Autodesk.Revit.DB.Structure.AreaLoadType symbol).  Подаю исходные данные для второго метода, срабатывает первый метод и машина просит предоставить аналитику
(https://prnt.sc/ijm5ie)
Название: Re: AreaLoad Create
Отправлено: Александр Пекшев aka Modis от 25-02-2018, 22:19:28
Было бы неплохо хоть какой-то код увидеть. Может у вас ошибка где-то?
Название: Re: AreaLoad Create
Отправлено: Khasan Mamaev от 25-02-2018, 22:38:00
Код - Python [Выбрать]
  1. loads = []
  2. fVect = XYZ(0,0,-1)
  3. for i in rvtLines:
  4.         cloop = cLoop(i)
  5.         TransactionManager.Instance.EnsureInTransaction(doc)
  6.         a = AreaLoad.Create(doc, cloop, fVect, Autodesk.Revit.DB.Structure.AreaLoadType)
  7.         loads.append(a)
  8.         TransactionManager.Instance.TransactionTaskDone()

Ругается так Traceback (most recent call last):
  File "<string>", line 47, in <module>
TypeError: expected AnalyticalModelSurface, got List[CurveLoop]
Название: Re: AreaLoad Create
Отправлено: Александр Пекшев aka Modis от 25-02-2018, 22:43:56
1. Не видно из примера, что такое cloop = cLoop(i)
2. Третьим четвертым параметром в метод должен передаваться типоразмер нагрузки (или null для типоразмера по умолчанию). А вы что передаете? Типоразмер - это элемент базы данных проекта
Название: Re: AreaLoad Create
Отправлено: Khasan Mamaev от 25-02-2018, 22:49:20
Код - Python [Выбрать]
  1. def cLoop(x):
  2.         zz = List[Autodesk.Revit.DB.Curve]()
  3.         for j in x:
  4.                 zz.Add(j)
  5.         cLoop = CurveLoop.Create(zz)
  6.         curveLoops = List[CurveLoop]()
  7.         curveLoops.Add(cLoop)
  8.         return curveLoops

Третьим параметром должен передаваться вектор направления нагрузки
Название: Re: AreaLoad Create
Отправлено: Александр Пекшев aka Modis от 25-02-2018, 22:50:30
Третьим параметром должен передаваться вектор направления нагрузки
Я ошибся - четвертым параметром
Название: Re: AreaLoad Create
Отправлено: Khasan Mamaev от 25-02-2018, 22:56:26
Проблема появляется раньше, вот же она expected AnalyticalModelSurface, got List[CurveLoop]. Как заставить работать второй вариант метода?
Название: Re: AreaLoad Create
Отправлено: Александр Пекшев aka Modis от 25-02-2018, 22:59:58
Проблема появляется раньше, вот же она expected AnalyticalModelSurface, got List[CurveLoop]. Как заставить работать второй вариант метода?
Определение того, какую перегрузку метода использовать CLR решает сама в зависимости от того, какие параметры передаются в метод. Поэтому нужно проверить правильность ВСЕХ параметров!

P.S. В какой версии Ревита пробуете? Возможно стоит попробовать другую версию, так как в API частенько встречаются баги
Название: Re: AreaLoad Create
Отправлено: Khasan Mamaev от 26-02-2018, 11:13:52
Ревит 2018, задача решилась довольно просто AreaLoad.Create(doc, cloop, fVect, None), спасибо Саше Игнатовичу
Название: Re: AreaLoad Create
Отправлено: Александр Пекшев aka Modis от 26-02-2018, 11:17:03
Ревит 2018, задача решилась довольно просто AreaLoad.Create(doc, cloop, fVect, None), спасибо Саше Игнатовичу
Я вам об этом сразу написал вообще-то:
2. Третьим четвертым параметром в метод должен передаваться типоразмер нагрузки (или null для типоразмера по умолчанию). А вы что передаете? Типоразмер - это элемент базы данных проекта
и в догонку еще объяснил почему:
Определение того, какую перегрузку метода использовать CLR решает сама в зависимости от того, какие параметры передаются в метод. Поэтому нужно проверить правильность ВСЕХ параметров!

Но почему-то вы решили меня не слушать. Обидненько однако
Название: Re: AreaLoad Create
Отправлено: Khasan Mamaev от 26-02-2018, 11:20:25
Прошу прощения, плюсик в карму