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

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

 

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

Вступ

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

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

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

 

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

Лірика

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

Читайте також  10 питань програмісту fillpackart — «Я даремний дурень і хочу звільнитися»

Степан Лютий

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

You may also like...

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

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