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

ADN Club => Revit API => Тема начата: Hohil от 07-11-2016, 18:44:48

Название: Revit Table Lookup.
Отправлено: Hohil от 07-11-2016, 18:44:48
Уважаемые программисты, прошу помощи в написании макроса.
Необходимо в активном проекте REVIT, у семейства (загруженного в данный проект) выполнить обновление таблиц выбора(manage lookup tables - табличные базы данных в формате *.csv), без редактирования самого семейства.
Иными словами,написать макрос, который бы, при выборе семейства в текущем проекте, обновлял выбранную таблицу из имеющихся в семействе табличных форм( lookup tables ).
Название: Re: Revit Table Lookup.
Отправлено: Виктор Чекалин от 07-11-2016, 23:19:13
Hohil, доброго времени суток. Прошу уточнить, вы ищете человека, который вам напишет такой макрос, или вы хотите сами написать, но не знаете в каком направлении двигаться и с чего начать?
Название: Re: Revit Table Lookup.
Отправлено: Hohil от 08-11-2016, 08:55:34
Добрый день, Виктор. Хотелось бы в идеале разобраться самому (очень поверхностно знаком с Revit API), ну или позаимствовать похожий код, если когда-нибудь, кто-либо сталкивался с данной необходимостью.

Если же все таки данная просьба - вопрос частного характера, то можем обсудить рабочие моменты и условия с человеком, готовым взяться за эту работу.
Название: Re: Revit Table Lookup.
Отправлено: Hohil от 23-12-2016, 17:38:41
Вообщем и целом, не получив ни одного ответа и ни одного комментария по данному вопросу, пришлось решать данную проблему самому, и в процессе изучения C#, Revit API и написания самого макроса, возникли следующие проблемы и вопросы, прошу всех небезразличных прокомментировать сие творение) Строго не судите, мое самообразование началось с момента написания первого сообщения:
Мои рассуждения и комментирование кода:
1)Первом делом нужно выбрать семейство, загруженное в текущий проект REVIT для дальнейший работы с ним:
Код - C# [Выбрать]
  1.                        
  2.                         UIDocument uidoc=this.ActiveUIDocument;
  3.                         Document doc=uidoc.Document;
  4.                         Selection sel=uidoc.Selection;
  5.                         Reference hasPickOne = sel.PickObject(ObjectType.Element);
  6.                         ElementId el=hasPickOne.ElementId;
  7.                         Element element=doc.GetElement(el);
  8.                         FamilyInstance familyinstance=element as FamilyInstance;
  9.                         Family family=familyinstance.Symbol.Family;
  10.  
2)Экземпляр семейства мы выбрали, далее возникает вопрос: как получить метод ImportSizeTable класса FamilySizeTableManager, не имея в нем никаких членов ссылающихся на семейство       загруженное в проект(которое мы получили в пунтком 1), кроме как метода GetFamilySizeTableManager()- как работает этот метод я так и не понял.
Но не останавливаясь на достигнутом я решил продолжить, родился этот код:
Код - C# [Выбрать]
  1.                            
  2.                         Document fd=doc.EditFamily(family);
  3.                         string path=@"";
  4.                         FamilySizeTableManager manager=FamilySizeTableManager.GetFamilySizeTableManager(fd,el);
  5.                         FamilySizeTableErrorInfo error=new FamilySizeTableErrorInfo();
  6.                         manager.ImportSizeTable(fd,path,error);
  7.  
При выполении макроса в REVIT выскакивает ошибка"System.NullReferenceException:Object reference not set to an instance of an object"

В чем я ошибся и как реализовать 2 часть кода?
Название: Re: Revit Table Lookup.
Отправлено: butthead от 15-03-2019, 13:40:33
Hohil, Вы решили проблему с System.NullReferenceException? Или может быть кто-то знает, как её решить?