FreeCAD — новий метод малювання

Disclamer: Я ніколи в своєму житті не працював з CAD/CAM додатками раніше, і раптом довелося. Принципи роботи FreeCAD мене так захопили, що це вимагає термінового поста, щоб розповісти іншим.

 

Написане в цьому пості, найімовірніше, буде тривіальним і нудним для більшості активних користувачів CAD, і цей пост націлений в першу чергу на не-користувачів CAD з метою розповісти їм про чудовий новий світ комп’ютерної графіки.

Вступ

У мене виникла проста задача — зробити 3D модель своєї квартири. Не просто “стінки в розмір”, а всі балки, виступи і нахили. Я спробував одну, другу, третю програму… Я зневірився (почалося з SweetHome3D, а закінчилося blender і inkscape). Вони всі були страшенно незручними. Серед програм, які я спробував, був і FreeCAD, який я пропустив через “ніфіга не робити” і “не працює”. Після того, як я зневірився, я ще раз пішов по другому колу. На цей раз, трохи більше читаючи документацію… І FreeCAD не тільки “злетів”, але і ще і відкрив для мене чудовий новий світ точного векторного малювання, що ґрунтується на Constrains.

Проблеми моделювання

Для початку я розповім про ту біль, від якої я страждав у різних редакторах.

 

Почнемо з SweetHome3D. Умовно-зрозумілий інтерфейс, що дозволяє описати кімнату як “стать” (де задається форма і виступи), навколо якої робиться “стіна”. SweetHome3D дав мені дві проблеми: піксельхантинг (розмір змінюється або мікроскопічними зрушеннями миші, або в діалозі, але не існує методу “притиснути” стінку до підлоги з точністю — тільки піксельхантинг. Друга проблема — модель SweetHome3D не передбачає існування балок, арок і інших елементів стіни, не виконуються зверху до низу. Додатково, SH3D не вміє похилих стін і підлоги (я б хотів, щоб таких проблем у мене не було, але перед тим, як цю проблему усувати IRL, її треба задокументувати). Тобто SH3D покриває 90% того, що мені було потрібно, доставляючи неймовірну біль з 5%, і роблячи неможливим решта 5%.

Читайте також  Чого я навчився, створивши 100 ігор за 5 років

 

Blender теоретично дозволяє зробити все, але тільки теоретично. На практиці або моїх навичок не вистачало, або сам процес дуже повільний, але намалювавши три з половиною кута, я здався. Занадто повільно і занадто багато метушні з освітленням та іншими неважливими речами. Плюс (наскільки я знаю), Blender навряд чи зможе показати нормальні 2D проекції з розмірами.

 

Inkscape був хороший крім однієї проблеми — в багатосекційні лінії (F2) неможливо задати розміри кожної секції. Можна було б — я б все в Inkscape так і малював.

 

… Але мій пост не про абсолютну перевагу FreeCAD над Blender (я обох їх новачок і порівняти не можу), а про новий стиль малювання. Спочатку про проблеми старого стилю (тобто “звичайного” векторного малюнка).

Проблема піксель-хантингу

Перед тим, як перейти до картинок і поясненню ідеї Constrains, я хочу зосередитися на кількох проблемах, що одвічно переслідують векторні малюнки:

 

  • Майже об’єднані криві. Якщо дві криві майже стикаються, то можна подумати, що вони стикаються. У якийсь момент (при друці, або при подальших маніпуляціях), картинка розвалиться.

     

  • Майже паралельні/перпендикулярні лінії. Вони паралельні, але не до кінця.

     

 

 

зверніть увагу на outline, він показує, що описує прямокутник для двох ліній більше самої лінії, тобто лінія під гострим кутом.

 

  • похідна від попереднього — лінії, що стикуються під кутом 0.001°.

     

  • неточності в розмірах і товщині ліній. Лінія має свою товщину, і при редагуванні (поворотах, ресайзах і т. д.) товщина починає плисти. Більш того, в більшості векторних реакторів важко намалювати квадрат з площею 100 і лінією товщиною 0.5 (тому що лінія на 50% заходить на площу фігури, і ми маємо не 10х10 всередині, а 9.75х9.75).

     

  • Збереження align’а і симетрії є завданням, що вимагає постійної уваги.

     

 

В редакторах вбудовано безліч інструментів для боротьби з подібними неприємностями, але в цих інструментів є одне ускладнення — їх треба осмислено застосовувати там, де виникла проблема. А за виникненням проблем треба стежити самому.

Constrains

Це було довгий вступ.

Давайте спробуємо намалювати квадрат зі стороною 10, спираючись на його фундаментальні властивості.

 

У квадрата 4 прямі краї.

 

 

Майже вийшло. Солвер підказує, що нам треба задати 15 додаткових утримуючів зв’язків, щоб наша фігура була однозначною (у неї було 0 ступенів свободи).

 

  • Протилежні сторони квадрата паралельні *

 

 

Солвер каже, вже краще. Стало не вистачати 13. Зверніть увагу на червоні позначки — це вказівка на constrains. На самому початку у нас випадково вийшло два обмеження — дві горизонтальні лінії.

 

Стало краще, хоча на квадрат це все ще мало схоже. Що ж не так? Ах, так, квадрат — це полігон, а біля полігону сторони сходяться в кутах в точку. Додамо ці обмеження.

 

 

Вийшло трохи несподівано, хоча solver все більш задоволений. Зазначена фігура — звичайний такий чотирикутник, в якому сторони попарно паралельні. Трохи за межами шкільного курсу, але цілком зрозуміло.

 

Додамо обсягу… площини до цієї постаті. Сусідні грані — перпендикулярні.

 

 

Вже схоже на правду (хоча це я трохи підтягнув вгору малюнок, тому що сторони нульового розміру цілком влаштовують solver як перпендикулярні до прямої, на якій лежать (у вигляді точок)). solver лається на надлишок обмежень. Погодимося з ним і видалимо одну перпендикулярність (у нас вимога попарної паралельність, перпендикулярність для однієї пари автоматично випливає із перпендикулярності першої пари). Після того, як ми видалили зайве, solver скаржиться на 4 свободи.

 

Заборонимо ще що-небудь, так як свободи занадто багато.

 

Наприклад, скажімо, що всі сторони повинні бути однакового розміру. Досить зробити це для двох будь-яких суміжних сторін, і з цього випливає, що всі сторони рівні (шкільна геометрія!).

 

Після цього у нас виходить три свободи. Ще три свободи? Але квадрат ж… Так, це квадрат, але ми не знаємо його розміру (0 — теж розмір, між іншим), і положення у просторі.

 

Задамо його зазначимо, що один з кутів квадрата лежить на точці “0, 0”, плюс задамо для однієї з сторін розмір у 10мм.

 

Все, квадрат повністю готовий, у нього немає свобод, а значить, немає і прихованих помилок.

 

 

Цей приклад був трохи гротескним, але, як я сподіваюся, виразним. Особливо мене вразило, що solver не тільки перевіряє на відсутність неоднозначностей, але ще і попереджає, якщо фігура містить більше обмежень, ніж треба.

Лірика

Для мене такий метод опису малюнка є абсолютно новим і несподіваним. В якомусь сенсі він нагадує те, що роблять типізовані мови програмування з машинним кодом — додають в нього обмежень, що дозволяють математично-точної формі задати обмеження на можливі операції з даними. В той момент, коли обмежень досить багато, ми отримуємо однозначне рішення, яке точно і точно однозначне. І точно правильне, якщо вхідні дані були правильними. І ніяких “випадково зачепив мишкою” або “рука здригнулася”.

Читайте також  Робимо радіостанцію з GTA: San Andreas

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

You may also like...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *