Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion

Автор Тема: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion  (Прочитано 3971 раз)

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

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Пытаюсь создать программным путем элемент выдавливания в семействе типовой модели, код на Питоне в Динамо следующий:

Код - Python [Выбрать]
  1. import clr
  2. clr.AddReference("RevitServices")
  3. import RevitServices
  4. from RevitServices.Persistence import DocumentManager
  5. from RevitServices.Transactions import TransactionManager
  6. from System.Collections.Generic import *
  7. # Import RevitAPI
  8. clr.AddReference("RevitAPI")
  9. import Autodesk
  10. from Autodesk.Revit.DB import *
  11.  
  12. from Autodesk.Revit.Creation.FamilyItemFactory import NewExtrusion
  13.  
  14. clr.AddReference("RevitNodes")
  15. import Revit
  16. clr.ImportExtensions(Revit.Elements)
  17. from Revit.Elements import *
  18. clr.ImportExtensions(Revit.GeometryConversion)
  19.  
  20. doc = DocumentManager.Instance.CurrentDBDocument
  21.  
  22.  
  23. lines = IN[1]
  24.  
  25. rvtLines = [i.ToRevitType() for i in lines]
  26.  
  27. curveArrArray = CurveArrArray()
  28. curveArray1 = CurveArray()
  29. for i in rvtLines:
  30.         curveArray1.Append(i)
  31. curveArrArray.Append(curveArray1)
  32.  
  33. pl = Autodesk.Revit.DB.Plane.CreateByNormalAndOrigin(XYZ(0,0,1), XYZ(0,0,0))
  34.  
  35. TransactionManager.Instance.EnsureInTransaction(doc)
  36.  
  37. sketchPlane = Autodesk.Revit.DB.SketchPlane.Create(doc,pl)
  38. solid1 = NewExtrusion(True, curveArrArray, sketchPlane, 100.0)
  39.  
  40. TransactionManager.Instance.TransactionTaskDone()

Подаю в метод, как и требуется, четыре аргумента, но код не работает и ругается что нужно пять аргументов



Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion
« Ответ #1 : 11-03-2018, 02:11:16 »
Подаю в метод, как и требуется, четыре аргумента, но код не работает и ругается что нужно пять аргументов
Пятый (а точнее нулевой) аргумент - это объект, с которым метод должен работать: http://www.revitapidocs.com/2015/425e8577-ba2a-ba19-ac24-069078f97209.htm?section=exampleToggle
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Re: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion
« Ответ #2 : 11-03-2018, 09:35:53 »
никакого пятого(нулевого) колеса не нужно, была ошибка в методе создания в строке 38 должно быть:
Код - Python [Выбрать]
  1. solid1 = doc.FamilyCreate.NewExtrusion(True, curveArrArray, sketchPlane, 100.0)

и все норм работает

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion
« Ответ #3 : 11-03-2018, 10:05:45 »
никакого пятого(нулевого) колеса не нужно, была ошибка в методе создания в строке 38 должно быть:
Код - Python [Выбрать]
  1. solid1 = doc.FamilyCreate.NewExtrusion(True, curveArrArray, sketchPlane, 100.0)

и все норм работает
Могу предположить, что проблема была в том, что в самом Dynamo тоже есть методы (ноды) с такими-же названиями и у вас в коде вызывался просто не тот метод, который был нужен

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

  • ADN Club
  • Сообщений: 44
  • Карма: 7
    • Конструктивный диалог
  • Skype: wolfram222
Re: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion
« Ответ #4 : 11-03-2018, 10:11:13 »
В Dynamo нет метода NewExtrusion, я выше показал свою ошибку.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion
« Ответ #5 : 11-03-2018, 10:22:58 »
В Dynamo нет метода NewExtrusion, я выше показал свою ошибку.
Я, если вы не поняли, свой вывод и сделал опираясь на ваш ответ! Иначе, в чем разница вызова метода как в вопросе и вызова метода, который работает правильно?!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion
« Ответ #6 : 11-03-2018, 13:15:59 »
никакого пятого(нулевого) колеса не нужно, была ошибка в методе создания в строке 38 должно быть:
Код - Python [Выбрать]
  1. solid1 = doc.FamilyCreate.NewExtrusion(True, curveArrArray, sketchPlane, 100.0)

и все норм работает
1. Ты не понял того, что я написал
2. Ты вызывал метод без указания объекта, над которым этот метод производится. Объект и есть этот дополнительный аргумент. В данном случае этот объект doc.FamilyCreate
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion
« Ответ #7 : 11-03-2018, 13:49:39 »
2. Ты вызывал метод без указания объекта, над которым этот метод производится. Объект и есть этот дополнительный аргумент. В данном случае этот объект doc.FamilyCreate
Вы правы, а я какую-то чушь сморозил =) Хотя, моя чушь в некоторых случая верна.
Но у меня вот другой вопрос - если этот метод вызывается для объекта, значит это метод расширения. Почему тогда в справке в сигнатуре метода отсутствует аргумент this ...?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion
« Ответ #8 : 11-03-2018, 14:51:01 »
если этот метод вызывается для объекта, значит это метод расширения.
Почему ты так решил? Думаю что это обычный метод. Честно говоря мне не понятно почему Python вообще пропустил такое выражение solid1 = NewExtrusion(True, curveArrArray, sketchPlane, 100.0) Возможно это его специфика. Думаю, что C# ругнулся бы на этапе компиляции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion
« Ответ #9 : 11-03-2018, 15:03:18 »
Почему ты так решил? Думаю что это обычный метод
У меня вот в этом месте провалы в знаниях (( Я не понимаю, как делается метод в одном классе, но вызывается у свойства другого объекта! Т.е. метод NewExtrusion() определен в классе Autodesk.Revit.Creation.FamilyItemFactory, но вызываться должен у Autodesk.Revit.DB.Document.FamilyCreate - что является свойством. Я так понимаю, что это что-то относящееся к фабрикам, про которые у меня знаний ровно ноль

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Autodesk.Revit.Creation.FamilyItemFactory.NewExtrusion
« Ответ #10 : 11-03-2018, 15:16:22 »
Александр Пекшев aka Modis,
Свойство Document.FamilyCreate возвращает объект класса FamilyItemFactory, у которого есть метод NewExtrusion.  Всё предельно просто.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение