Windows
Мелочи операционной системы, которые всплывают постоянно — пути, окружение, консоль. То, что проще один раз записать, чем каждый раз вспоминать.
01Переменные окружения и PATH
Переменные делятся на пользовательские и системные. Правятся через «Параметры системы → Дополнительно → Переменные среды» либо командой setx ИМЯ значение (без /M — для пользователя, с /M — для системы, нужны права администратора).
Важная тонкость: изменения PATH подхватываются только новыми процессами. Уже открытая консоль старый PATH не обновит — оболочку надо перезапустить. За то, какие расширения считаются исполняемыми, отвечает отдельная переменная PATHEXT (по умолчанию туда входят .COM;.EXE;.BAT;.CMD и др.).
02Пути и лимит в 260 символов
Разделитель пути в Windows — обратный слэш \, но большинство API понимают и прямой /. Исторический лимит длины пути — MAX_PATH = 260 символов, из-за чего глубокие вложенные папки могут вызывать ошибки копирования.
Обойти можно префиксом \\?\ перед абсолютным путём (снимает разбор и лимит), а в Windows 10/11 — включением длинных путей через групповую политику или ключ реестра LongPathsEnabled. Для проектов Rhino с длинными именами блоков и текстур это иногда спасает.
03Концы строк: CRLF против LF
Windows завершает строки парой CR LF (\r\n), Unix — одним LF (\n). При переносе скриптов между системами это ломает shebang, конфиги и парсеры, которые не ждут лишнего \r.
В Git поведение регулируется настройкой core.autocrlf. Текстовые редакторы (VS Code, Notepad++) показывают текущий тип в строке состояния и умеют переключать его одним кликом — удобно перед заливкой файла на Linux-сервер.
04PowerShell и его псевдонимы
Ловушка, на которой спотыкаются многие: в PowerShell curl, wget и ls — это псевдонимы встроенных командлетов (Invoke-WebRequest, Get-ChildItem), а не привычные утилиты. Поэтому флаги вроде -I у «curl» в PowerShell работают не так, как ожидается.
Чтобы вызвать настоящий curl из состава Windows, пишите имя с расширением — curl.exe. А запуск сторонних скриптов может блокировать политика: снимается через Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
05AppData: Roaming, Local, LocalLow
Настройки приложений живут в скрытой папке %APPDATA% и рядом. Roaming — данные, которые следуют за пользователем в доменном профиле; Local — привязано к конкретной машине (кэши, крупные файлы); LocalLow — для процессов с низким уровнем целостности.
Rhino и плагины Grasshopper хранят пользовательские настройки, лицензии тулбаров и кэш именно здесь — полезно знать, куда смотреть при переносе окружения на новый ПК.
06Планировщик задач
Графический интерфейс — taskschd.msc, из консоли то же делается через schtasks. Планировщик удобен для регулярных бэкапов проектов, автозапуска утилит при входе и обслуживания по расписанию.
Частая причина «задача не срабатывает» — она настроена запускаться только при входе пользователя, тогда как нужен запуск от системы; проверяйте вкладку условий и учётную запись, под которой идёт выполнение.
Rhinoceros
Заметки по NURBS-моделированию в Rhino — то, что чаще всего нужно под рукой. Названия команд даю так, как они вводятся в командной строке.
01Единицы и допуск (tolerance)
Перед моделированием стоит задать единицы и абсолютный допуск в «Свойства документа → Единицы». Допуск — это не косметика: от него зависит, сойдутся ли пересечения, обрезки и булевы операции. Слишком грубый допуск даёт щели, слишком мелкий — тормоза и «мусорные» микрограни.
Для миллиметровых моделей типичное значение абсолютного допуска — 0.001–0.01. Менять его посреди проекта не рекомендуется: уже построенная геометрия останется со старой точностью.
02Навигация по вьюпортам
В перспективе вращение — перетаскивание правой кнопкой мыши, панорама — Shift + ПКМ, зум — Ctrl + ПКМ или колесо. В параллельных проекциях (Top, Front, Right) правая кнопка по умолчанию панорамирует.
Полезные команды: Zoom с опцией Selected — приблизиться к выделенному, 4View — переключить одно/четыре окна, именованные виды сохраняются через NamedView.
03Привязки объектов (Osnap)
Точность построений держится на привязках. Постоянные включаются галочками на панели Osnap: End, Mid, Cen, Int, Perp, Tan, Quad, Near, Point. Разовую привязку можно вызвать прямо во время команды, удерживая нужный пункт.
Если курсор «залипает» не туда, лишние привязки лучше временно снять — часто мешает одновременно включённый Near, перебивающий более точные End/Int.
04Gumball
Гизмо-манипулятор: стрелки — перемещение по осям, дуги — поворот, квадратики — масштаб, плоскостные маркеры — сдвиг в плоскости. Ввод числа во время перетаскивания задаёт точное значение.
Сам gumball можно перенести, не двигая объект: удерживая Ctrl, перетащить его центр или ось — удобно, чтобы вращать вокруг произвольной точки или выровнять по грани.
05Команды поверхностей
Базовый набор для построения оболочек: Loft — поверхность по сечениям, Sweep1/Sweep2 — протяжка профиля по одной или двум направляющим, Revolve — вращение профиля вокруг оси, EdgeSrf — поверхность по 2–4 краевым кривым.
Для сложных случаев — NetworkSrf (по сетке кривых) и Patch (натянуть на облако точек/кривых). Направление и «шов» кривых сильно влияют на результат Loft: если поверхность перекручена, помогает опция выравнивания швов.
06Почему падают булевы операции
Самая частая причина отказа BooleanUnion/BooleanDifference — незамкнутые объекты: у полисолида есть открытые (naked) края, и Rhino не понимает, что «внутри». Проверяйте командой ShowEdges (показать голые края) и SelBadObjects (найти некорректную геометрию).
Также мешают совпадающие или касательные грани и несоответствие допуску — операция «не видит» пересечения. Иногда проще заранее пересечь объекты через Intersect, посмотреть, где кривая пересечения рвётся, и починить именно этот участок.
07History
Если включить запись истории (History, кнопка Record History в строке состояния) перед командой вроде Loft, поверхность останется связанной с исходными кривыми: подвинули сечение — поверхность пересчиталась. Это лёгкая параметрика без Grasshopper.
Работает не со всеми командами и рвётся, если удалить или заменить исходные объекты. Для устойчивой параметрики сложных зависимостей уже нужен Grasshopper (см. ниже).
Grasshopper
Grasshopper — визуальное программирование поверх Rhino: логика собирается из компонентов на холсте, а геометрия строится по этой логике. Заметки для тех, кто уже прошёл первые шаги.
01Холст и компоненты
Определение (definition) собирается на холсте из двух видов узлов: параметров — контейнеров данных (Point, Number, Curve) — и компонентов, которые выполняют операции. Выходы соединяются со входами «проводами»; данные текут слева направо.
Слайдер задаётся двойным кликом по холсту (введите, например, 0..100), панель Panel показывает содержимое любого провода — первый инструмент отладки, когда результат «не тот».
02Потоки данных: списки и деревья
Ключевая концепция, на которой спотыкаются все новички. Данные в Grasshopper бывают одиночными, списками и деревьями — иерархией списков с адресами-путями вида {0;1}. Понимание структуры данных важнее, чем знание конкретных компонентов.
Когда результат «размножается» или «схлопывается» не так, как ожидалось, почти всегда дело в структуре: посмотрите ветки через Param Viewer (в режиме дерева) — он рисует, сколько веток и сколько элементов в каждой.
03Согласование данных
Когда на входы компонента приходят списки разной длины, Grasshopper по умолчанию использует правило «самого длинного»: последний элемент короткого списка повторяется. Это часто и есть причина неожиданных результатов.
Поведение меняют компоненты Shortest List, Longest List и Cross Reference (все со всеми — декартово произведение). Осознанный выбор согласования решает большинство «почему у меня 100 линий вместо 10».
04Компоненты для старта
Минимальный набор, чтобы что-то построить: Series и Range — генерация чисел, Construct Point — точка из координат, Move — сдвиг на вектор, Loft/Extrude — поверхности из кривых.
Хороший первый экзерсис — построить ряд точек через Series, поднять их по синусоиде и прогнать через Interpolate/Loft: сразу видно, как параметр (слайдер) управляет геометрией.
05Операции со списками
Рабочая лошадка обработки данных: List Item — взять элемент по индексу, List Length — длина, Shift List — сдвиг (удобно для соединения соседних точек), Cull Pattern/Cull Index — выбросить элементы по маске.
Dispatch раскидывает список на два по булевой маске, Weave — наоборот, чередует несколько списков в один. Комбинация Shift + линия между i и i+1 — классический приём построения рёбер по ряду точек.
06Операции с деревьями
Управление структурой: Flatten — свести всё в один список, Graft — поместить каждый элемент в свою ветку, Simplify — убрать лишние уровни пути. Именно эти три операции решают большинство проблем с согласованием.
Для тонкой перестройки путей есть Path Mapper (переписывание адресов веток по шаблону) и Partition List (нарезка списка на ветки заданной длины) — уже для случаев, когда простого Graft/Flatten не хватает.
07Bake и плагины
Пока геометрия живёт в Grasshopper, её нет в документе Rhino. Чтобы «запечь» результат в реальные объекты — правый клик по компоненту → Bake (можно указать слой). До бейка стоит проверить структуру данных, иначе в Rhino прилетит не то.
Полезные плагины: Kangaroo (физика и релаксация сеток), Weaverbird (сглаживание и подразбиение мешей), LunchBox (панелизация и математические поверхности), Pufferfish (морфинг и трансформации), Anemone (циклы). Ставятся через менеджер пакетов и появляются отдельными вкладками на панели.