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

ADN Club => Revit API => Тема начата: miko от 27-09-2015, 01:44:19

Название: Python. Создание экземпляра класа
Отправлено: miko от 27-09-2015, 01:44:19
Доброго времени суток !
Изучая Python столкнулся с тем что в Revit API совершенно нету справки для Python, перерыл много информации но так особо и не нашел как создавать мне нужные веши. Итак суть проблемы такова:

C#:
Код - C# [Выбрать]
  1. ElementClassFilter symbolFilter = new ElementClassFilter(typeof(FamilySymbol));

и тд. То есть создаем новый класс  на основе базового. А теперь сама проблема:

Python:
Код - Python [Выбрать]
  1. class ElementClassFilter(symbolFilter):
  2.     def __init__(typeof(FamilySymbol))

правильно ли я понимаю ? наверное нет так как ядро питона ругается  на скобки в методах наследуемого класса. Буду рад любому совету.
   
Название: Re: Python. Создание нового класса на основе базового
Отправлено: Дмитрий Дронов от 27-09-2015, 11:17:17
Возможно вам поможет этот пример по созданию коллектора:

Код - Python [Выбрать]
  1. import clr
  2. clr.AddReference('RevitAPI')
  3. from Autodesk.Revit.DB import *
  4.  
  5. clr.AddReference("RevitServices")
  6. import RevitServices
  7. from RevitServices.Persistence import DocumentManager
  8.  
  9. import System
  10.  
  11. doc = DocumentManager.Instance.CurrentDBDocument
  12. elementlist = []
  13.  
  14. FamilyType = UnwrapElement(IN[0])
  15. BltInCat = System.Enum.ToObject(BuiltInCategory, FamilyType.Category.Id.IntegerValue)
  16. SymbolCollector  = FilteredElementCollector(doc)
  17. SymbolCollector.OfCategory(BltInCat)
  18. ftlist =  list()
  19. for item in SymbolCollector.ToElements():
  20.     if item.GetTypeId().IntegerValue == FamilyType.Id.IntegerValue:
  21.         ftlist.append(item)
  22. elementlist.append(ftlist)
  23. OUT = elementlist


Простите, я не большой специалист ревитАПИ. И работаю с ним через динамо (http://dynamobim.com/), поэтому на вход поставлю IN[0] а на выход OUT. Плюс использую чисто динамовский метод UnwrapElement. Мне самому интересно узнать решение вашего вопроса. Если у вас получится - напишите пожалуйста решение. Спасибо.


(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fjoxi.ru%2F4Akvav9u641X2q%3Fd%3D1&hash=7d7e63cb570a88531a9909f320c6a86c)
Название: Re: Python. Создание нового класса на основе базового
Отправлено: Александр Ривилис от 27-09-2015, 13:09:46
miko
Приветствую на форуме.


C#:
ElementClassFilter symbolFilter = new ElementClassFilter(typeof(FamilySymbol));

и тд. То есть создаем новый класс  на основе базового.
Это называется создавать экземпляр класса, а не новый класс на основе базового.
Название: Re: Python. Создание нового класса на основе базового
Отправлено: miko от 27-09-2015, 13:17:45
Александр Ривилис спасибо !
да действительно порылся и выяснил что это все же экземпляр класса в итоге в Python:
symbolFilter= ElementClassFilter(type(FamilySymbol)) ? :) не могу разобраться с typeof в C# точнее какой метод применить для Python
Название: Re: Python. Создание нового класса на основе базового
Отправлено: Александр Ривилис от 27-09-2015, 13:23:36
1. Я не пишу для Revit
2. Я не пишу на Python
3. Поиск в Internet говорит про функцию type()
Название: Re: Python. Создание экземпляра класа
Отправлено: miko от 27-09-2015, 14:03:31
все таки поиск для тех кто понимает что ищет ..... а у меня пока большие пробелы со знаниями в программировании !
итак в C#:
typeof - используется для получения типа на основе какого-либо класса
в Python:
type() - воспринимает объект произвольного типа и возвращает его тип. Аргумент действительно может быть произвольного типа: число, строка, список, словарь, кортеж, функция, класс, модуль и даже сам тип.
В итоге окончательный вид :
C#:
ElementClassFilter symbolFilter = new ElementClassFilter(typeof(FamilySymbol));
Python:
symbolFilter= ElementClassFilter(type(FamilySymbol))
поправьте если не прав !?
Название: Re: Python. Создание экземпляра класа
Отправлено: Дмитрий Дронов от 27-09-2015, 14:21:53
Питон это волшебный язык для новичков.
половину синтаксиса он срезает.
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fjoxi.ru%2FKAgkdkXCvP3WAl%3Fd%3D1&hash=6b38185d3e6e74db8cb75fc48a9cfacd)
Название: Re: Python. Создание экземпляра класа
Отправлено: Виктор Чекалин от 29-09-2015, 10:26:02
в Revit API совершенно нету справки для Python
Так а Python официально и не поддерживается.
Небольшая поправка. Я бы сказал нет примеров для Python. Сама же документация по API не привязана к какому-либо языку программирования, так как содержит описание классов, методов, свойств и т.п.
Ну а синтаксис конкретного языка, который выбрал разработчик (Python в данном случае) - это уже проблема программиста. Это уже он обязан знать как создавать новые экземпляры класса, присваивать переменные, использовать индексацию и т.д.