ADN Club > Revit API
Параметры в спецификации
Виктор Чекалин:
Прямо мистика какая то.
Последнее что еще могу предложить, выполните простую команду, в которой не производится больше никаких действий, кроме как обновление параметра:
--- Код - C# [Выбрать] --- public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Application app = uiapp.Application; Document doc = uidoc.Document; FilteredElementCollector filteredElementCollectorWall = new FilteredElementCollector(doc); var wall = filteredElementCollectorWall.OfClass(typeof(Wall)).FirstElement() as Wall; Parameter widthParam = wall.get_Parameter("Ширина2"); double widthValue = widthParam.AsDouble(); Parameter heightParam = wall.get_Parameter("Длина2"); double heightValue = heightParam.AsDouble(); double areaValue = widthValue * heightValue; using (Transaction t = new Transaction(doc, "Обновление параметра")) { t.Start(); var res = wall.get_Parameter("Площадь_стены2").Set(areaValue); t.Commit(); TaskDialog.Show("Запись значения в параметр", res.ToString()); } return Result.Succeeded; }
Также после выполнения команды вышлите мне файл журнала.
Он находится в папке C:\Users\<username>\AppData\Local\Autodesk\Revit\<Ваша версия ревит>\Journals. Мне нужен текстовый файл вида journal.XXXX.txt, где XXXX самый последний порядковый номер.
Есть ли у вас возможность проверить выполнение команды на другой версии Revit или еще лучше на другом компьютере?
Alexander:
Код возвратил true.
Также я вставил TaskDialog в свой проект и он тоже возвратил true. Но в параметр ответ не записывает(в моём проекте).
Виктор Чекалин:
--- Цитата: Alexander от 10-12-2013, 15:08:23 ---Код возвратил true.
--- Конец цитаты ---
Параметр при этом изменился в интерфейсе? Если в вашем не изменился, то изменился ли в моем простеньком проекте?
Alexander:
В моём нет,пустое поле.
В вашем да. 0 или больше, если увеличить ширину и длину.
В моём проекте несколько стен,у каждой Ширина2 = 5, Длина2= 6.
Так же , если я открываю другие проекты(примеры Ревит), и присваиваю такие же параметры для стен, то и там параметр не меняется в интерфейсе.
Виктор Чекалин:
--- Цитата: Alexander от 10-12-2013, 15:28:52 ---В моём проекте несколько стен,у каждой Ширина2 = 5, Длина2= 6.
Так же , если я открываю другие проекты(примеры Ревит), и присваиваю такие же параметры для стен, то и там параметр не меняется в интерфейсе.
--- Конец цитаты ---
Так ведь код то меняет значение площади только для одной, первой попавшейся стены, а не у всех стен. А вы в интерфейсе выбираете скорее всего другую стену, не ту у которой меняли параметр.
Чтобы изменить параметр у всех стен вам нужен вот такой код:
--- Код - C# [Выбрать] --- FilteredElementCollector filteredElementCollectorWall = new FilteredElementCollector(doc); var walls = filteredElementCollectorWall.OfClass(typeof(Wall)); using (Transaction t = new Transaction(doc, "Обновление параметра")) { t.Start(); foreach (Wall wall in walls) { Parameter widthParam = wall.get_Parameter("Ширина2"); double widthValue = widthParam.AsDouble(); Parameter heightParam = wall.get_Parameter("Длина2"); double heightValue = heightParam.AsDouble(); double areaValue = widthValue * heightValue; var res = wall.get_Parameter("Площадь_стены2").Set(areaValue); Debug.Print("Стена: {0}; Результат: {1}", wall.Id, res); } t.Commit(); }
Навигация
Перейти к полной версии