22 нояб. 2014 г.

Генерация новых списков в python /for i in .../ | dynamo tutor

Список /list/:

 a = [1, 2]

Используется для группировки множеств элементов имеющих свой индекс, разделенных запятыми и заключаемых в квадратные скобки. Нумерация индексов начинается с нуля.



Разворачивание элементов /UnwrapElements/ | dynamo tutor

Все ревит-элементы, на входе из Динамо-Нода в Питон, являются как бы завернуты в оболочки. То есть Нод, является капсулой для переноса ревит-элемента, и чтобы работать с ними в питоне - их нужно разворачивать. Делается это командой UnwrapElements().

Подключение РевитАПИ элементов в питоне:
Если вы хотите например создать РевитАПИ элемент непосредственно в Питоне, вы будете вынуждены подключить через TransactionManager базу Autodesk.Revit.DB.

Вот пример подключения ревит элементов:


Разворачивание элемента:
Если вы захотите воспользоваться РевитАПИ элементами непосредственно в питоне, так сказать напрямую, то при переходе из нода в питон вам придется РазвернутьЭлемент /UnwrapElement/, так как в питоне мы уже можем работать непосредственно с Ревит Элементами без использования Нод-Оболочки.


Заворачивание элемента:
Для того, чтобы продолжить работу с нашими элементами в виде нодов, нам нужно вернуть их в первоначальное состояние, а значит Завернуть /Wrapped/ в Revit.Elements.Element. Это можно сделать с помощью встроенного метода ToDSType(bool). Аргумент Bool определяет, является или нет проверяемый элемент "в собственности" Ревита /Revit-owned/. Это важно потому, что Revit-owned элементы не контролируются "Динамо", тогда как не-Revit-owned - контролируются.

Если вы создаете новый элемент в вашем Питон-скрипте, то вам не следует помечать Wrapped-элемент как Revit-owned. Тогда как если вы выбрали элемент из существующего ревит файла, то такая необходимость возникает.


Это означает, что если мы хотим работать в питоне именно с элементом Ревита, получая доступ ко всем свойствам и параметрам этого элемента, то нам нужно его развернуть, а если хотим работать с его нод-оболочкой - то тогда разворачивать не нужно. 

Привожу пример: 
Беру дверь, затем в нижнем питонскрипте ее не разворачиваю и в итоге имею доступ к базовым динамо атрибутам. А развернув элемент дверь в верхних питон скриптах - получаю к более широкому спектру атрибутов РевитАПИ Element.Properties



Ссылки:



Изменение списков операторами | python+dynamo tutor

Питон как и прочие высокоуровневые языки позволяет работать со Структурами данных /Data Structures/. По сути это означает работу с Типом данных list и tuple. В данном уроке мы рассмотрим как можно изменять уже существующие списки.

Что можно делать со списками:
  • list.append(x)  -  /Добавить элемент к концу списка /
  • list.extend(L)  -  /Расширить список за счёт добавления всех элементов переданного списка, как бы удвоение списка/
  • list.insert(i, x)  -  /Вставить элемент в указанную позицию. Первый аргумент — это индекс того элемента, перед которым требуется выполнить операцию вставки, поэтому вызов a.insert(0, x) вставляет элемент в начало списка, а a.insert(len(a), x) эквивалентно a.append(x)./
  • list.remove(x)  -  /Удалить первый найденный элемент из списка, значение которого — x. Если элемент не найден, генерируется ошибка./
  • list.pop([i])  -  /Удалить элемент, находящийся на указанной позиции в списке, и возвратить его в конец списка. Если индекс не указан, a.pop() удаляет и возвращает последний элемент списка. (Квадратные скобки вокруг i в сигнатуре метода означают, что параметр необязателен, а не необходимость набора квадратных скобок в этой позиции. Вы часто будете встречать такую нотацию в Справочнике по библиотеке.)/
  • list.index(x)  -  /Вернуть индекс первого найденного в списке элемента, значение которого равно x. Если элемент не найден, генерируется ошибка./
  • list.count(x)  -  /Вернуть количество раз, которое x встречается в списке./
  • list.sort()  -  /Сортировать элементы списка, на месте./
  • list.reverse()  -  /Обратить список вспять, на месте./
В данном случае list - это имя массива а не обязательная составляющая команды. Я проработал каждую операцию и у меня вышел такой себе нодсрипт, которым делюсь: 015_Data_Structures_0.7.5_work.dyn

Выглядит он так:

Ссылки:


21 нояб. 2014 г.

Code Block Element attributes | dynamo+DS tutor

Выписал все рабочие атрибуты элементов которые нашел для Код Блока (Дизайн скрипта). Остальные не работают или я о них не знаю.


Вот эти функции:
s.Name;
s.Id;
s.BoundingBox;
s.Location;
s.Parameters;
s.Symbol;
s.UniqueId;

Dynamo visual programming for design | pdf



Выборка типов размеров в проекте | dynamo script


Типы данных и их сортировка | dynamo+python tutor

В динамо есть четыре типы данных (Data Types)
  • Integer (Целое)
  • Boolean (Логическое) - в честь английского математика Джорджа Буля
  • floating-point numbers (Числа с плавающей запятой)
  • Strings (Строковые или алфавит)
  • List (Список)
В пайтоне (от Монти пайтон а не от рептилии, хотя питон говорить удобнее) их побольше:
В связи с этим.
Некоторые данные невозможно извлечь из питона в динамо (кортеж, словарь), но остается возможность пользоваться ими внутри питона.

Иногда возникает необходимость отделить одни типы данных от других. Для этого в питоне есть две функции type(a) и instance(a,type). Как они работают описано на питонере.

Теперь я попробую создать скрипт, который сортирует данные по их типу. Худо бедно, но я его сделал. Скрипт прост. Пропускается дальше данное, если оно соответствует нужному типу данных.


Кроме всего прочего эти данные можно конвертировать (Data Type Conversion)  одно в другое, но это уже другая история. 

Ах да. чуть не забыл. скачать скрипт можно тут: 007_Sorting_type_of_meta_0.7.5_work.dyn

Выборка элементов, типоразмеров и семейств из категории | dynamo script

Скрипт который позволяет выбрать все Типоразмеры (Symbol) из Категории (Category), а так же все Семейства (Family) из Категории (Category). Напоминаю Иерархию: Категория ► Семейство ► Типоразмер.

Итак скрипт:




20 нояб. 2014 г.

Интерьер квартиры в Москве | Geometrix Design

 Архитекторы Мирошкин Майкл и Мирошкина Элен, представляющие дизайн-студию Geometrix Design, оформили интерьер квартиры площадью 130 кв. метров в Москве. Когда они узнали название жилого комплекса и выслушали пожелания заказчика, сразу возникла картинка идеального интерьера: монохромный, лишённый каких-либо ненужных деталей.


19 нояб. 2014 г.

Установка, удаление Package | dynamo tutor

В этой папке:

C:\Users\Dmitry\AppData\Roaming\Dynamo\0.7\packages

лежат все дополнения которые можно скачать с ресурса http://dynamopackages.com/
Если вы пользуетеь своими - просто положите в эту папку наработки

Python книги | pdf




18 нояб. 2014 г.

Длина массива в Python (Len) | Dynamo tutor

Чтобы писать нормальные динамо коды - нужно шарить Питон. Я - дилетант. Поэтому как дилетант, буду начинать с самого простого. Длина массива внутри Питона считается через команду len и она идентична команде Count в динамо.


17 нояб. 2014 г.

Revit 2014 platform api developers guidlines | pdf

-
Платформа АПИ делится на две категории: Namespaces (Пространство имен) и Members (Категории, Параметры). В питоне пространство имен реализовано в модулях.


Шаблон | revit tutor

Согласен с Екатериной что Шаблон - это наше все.
Считаю все же что чистить шаблон это так же проблематично как и создавать новый (хотя конечно можно нажать "Удалить неиспользуемое" но тогда зачем же мы это создавали в шаблоне), поэтому шаблонов должно быть много. И в каждом из них должен быть необходимый минимум информации при чем уже заведомо резмещенной на листах.. Шаблоны можно разделить по стадиям (Э, П, Р) и по типологии проекта (АР-коттедж, АР-отель, АР-база отдыха, АР-МТЦ, ИР-квартира, ИР-бутик, ИР-кафе).  Итого 3х7=21 штуки :)

При этом при переходе на новую стадию лучше не "Копировать стандарты проекта" из нужного нам шаблона. А в объемном 3Д виде выделить абсолютно всю геометрию, сгруппировать ее, выгрузить во внешний ревит файл, затем по шаблону новой стадии создать новый проект, в него импортировать нашу модель, вгрузить и разблокировать группу. И после этого приступать к оформлению новой стадии.

Понравилась заставка: