Skip to content

uk_Constraints and Solvers

Kuzemko Alexsandr edited this page May 2, 2022 · 2 revisions

Assembly3 підтримує декілька бекендів вирішувача обмежень. Користувач може вибрати різні вирішувачі для кожної Збірки. Тип доступних обмежень може відрізнятися для кожного вирішувача. На момент написання цього тексту підтримуються два бекенда, один на основі вирішувача з SolveSpace, а інший використовує SymPy і SciPy, і моделюється після SolveSpace. Іншими словами, поточні два доступні вирішувачі підтримують практично той самий набір обмежень і повинні мати дуже схожу поведінку, за винятком певної різниці в продуктивності.

В Assembly3 реалізована більшість обмежень SolveSpace. Крім того, реалізовано декілька нових обмежень, які є більш корисними для збірок. Більшість із цих обмежень насправді є складовими оригінальних обмежень SolveSpace. Усі обмеження доступні у вигляді кнопок на панелі інструментів, але за замовчуванням видно лише найпоширеніші. Щоб показати всі обмеження, натисніть кнопку More. Перегляньте розділ нижче для ознайомлення з кожним обмеженням.

Створення Обмеження

Створювати обмеження легко. Просто створіть збірку натиснувши AddAssembly, перетягніть туди деталі, виберіть деякі елементи геометрії в 3D-виді і натисніть одну з кнопок обмеження, щоб створити обмеження. Елементи обмеження будуть показані як дочірні об’єкти під об’єктом обмеження. За замовчуванням, функція автоматичної видимості елементів активна, яка приховає обмежувальний елемент і автоматично покаже його під час вибору, або при виборі його батьківське обмеження. Щоб деактивувати цю функцію, натисніть AutoVis, і керуйте видимістю елементів вручну, як показано на наступному скриншоті.

Коли ви створюєте збірку, бажано спочатку вибрати базову деталь, яка повинна мати фіксоване розташування відносно самої збірки. Ви зробите це, створивши обмеження Lock Lock, як показано на скриншоті. Ви можете переміщати_locked_ деталі, використовуючи різні засоби переміщення Mover (Mover, AxialMover, QuickMover), або напряму змінюючи параметр Placement деталі. Обмеження Lock лише перешкоджає вирішувачу збірки змінювати розташування деталі. Якщо ви перемістили заблоковану деталь, кожна інша деталь переміститься до нового розташування заблокованої деталі після повторного обчислення вирішувача. Якщо ви не хочете випадково перемістити заблоковану деталь, натисніть LockMover.

Кожен об’єкт Constraint має властивість Type, яка дозволяє користувачеві змінювати тип існуючого обмеження за допомогою редактора властивостей. Не всі обмеження вимагають однакових типів елементів геометрії, а це означає, що зміна типу може зробити обмеження недійсним. В ієрархії документа ці недійсні обмеження будуть позначені червоним знаком оклику. Наведіть курсор миші на ці некоректні елементи, щоб побачити пояснення. Можна змінити порядок елементів за допомогою кнопок Up Down. Ви можете змінити існуючий елемент обмеження, вибиравши нову площину або ребро у 3D виді, почати перетягувати відповідний об'єкт в ієрархії та опустити його на елемент.

Обмеження Геометрічних Елементів

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

  • Точка
    • Координата вершини;
    • Середня точка лінійного ребра;
    • Центр кола;
    • Центр рамки для будь-якого іншого ребра;
    • Центр рамки для планарної поверхні;
    • Центр кругової поверхні;
    • Центр першого ребра (тобто Edge1) циліндричної поверхні.
  • Лінія (для обмеження має значення лише напрямок, а не кінцеві точки)
    • Лінійне ребро;
    • Вектор нормалі поверхні кола;
    • Вектор нормалі поверхні;
    • Вісь обертання циліндричної поверхні.
  • Площина, визначена точкою початку координат, що інтерпретується аналогічно до наведеної вище Точки, і вектор нормалі
    • Поверхня кола;
    • Поверхня першого ребра (тобто Edge1) циліндричної поверхні;
    • Поверхня площини.

Одна річ, з якою серйозному користувачу слід ознайомитись, це концепція Елементу в Assembly3. Елементи, які використовуються різними обмеженнями, ніколи не посилаються на фактичний об’єкт деталі безпосередньо, а через проміжний об’єкт, що зберігається в ElementGroup. Якщо геометрія належить якійсь моделі в підзбірці, тоді об’єкт Element зберігається в ElementGroup цієї підзбірки замість батьківського. Ви можете розглядати Елементи як оголошення інтерфейсів геометрії, що ця деталь (як підзбірка) може бути обмежена в збірках вищого рівня. Багато розширених функцій стали можливими завдяки цьому додатковому напряму - заміні деталей.

Як показано в попередньому розділі, ви можете створити обмеження, просто вибравши поверхню або ребро моделі деталі. За сценою відбувається те, що програма знайде підзбірку, якій належить вибрана модель геометрії деталі, і створить об’єкт Element у своїй ElementGroup, якщо немає існуючого, і, нарешті, створіть ElementLink, що посилається на Element, і помістить його під нове обмеження. Замість того, щоб безпосередньо вибирати елементи геометрії моделі в 3D-виді, ви також можете вибрати будь-який існуючий ElementLink або Element в ієрархії документа, щоб створити нові обмеження. Оптимальний спосіб це здійснити показано в посібнику.

Якщо ви обмежуєте об’єкт деталі безпосередньо без використання будь-яких під-збірок, то Елемент буде збережено прямо у поточній збірці. Це дозволено для швидкого тестування простих збірок, а також для полегшення початку роботи новачкам. Для реальних складних збірок рекомендується обернути кожен об’єкт деталі всередині збірки перед подальшим складанням, щоб кожне посилання геометрії до моделі деталі можна було згрупувати разом для легкого оновлення за допомогою перетягування. Знову дивіться цей посібник, щоб отримати додаткові поради для роботи зі складними збірками.

Зсув елементу геометрії

Кожний ElementLink має властивість Offset, що дозволяє застосувати деякі перетворення до елемента перед обмеженням. Зсув завжди знаходиться в координатному просторі елемента геометрії. Наприклад, для плоскої поверхні зміщення по вісі z завжди відбувається вздовж нормалі до площини. Оскільки ElementLink використовується одним і лише одним обмеженням, його зміщення не впливає на інші обмеження. Об’єкт Element також має властивість Offset з тією ж метою. Однак, оскільки на Element може посилатися кілька ElementLink, зміна зміщення може вплинути на множинні обмеження. Це корисно, наприклад, для введення певного припуску між деталями при складанні.

Наведене нижче відео показує використання Offset для елемента і показує різницю між використанням зміщення для ElementLink та Element.

Починаючи з версії 0.11, є кілька нових пунктів контекстного меню для спрощення маніпулювання зміщенням елемента. Просто клацніть правою кнопкою по будь-якому елементі або ElementLink в ієрархії документа, щоб побачити контекстне меню з доступними діями

  • Flip element (Перевернути елемент): перевернути Z нормаль елемента, повернувши його на 180 градусів відносно осі X. Якщо при активації цієї дії була натиснута клавіша CTRL, поворот відбудеться відносно осі Y елемента. Зауважте, що Flip element доцільно використовувати з обмеженням Attachment, оскільки воно однозначно слідує за Z нормаллю елемента. Для інших типів обмежень, наприклад PlaneConcidence або PlaneAlignment, ви можете спробувати Flip part, оскільки ці типи обмежень працюють однаково незалежно від орієнтації Z нормалі елемента, тому перегортання елемента не матиме жодного ефекту.

  • Offset element, використовуйте перетягувач (подібний до інструменту Mover), щоб налаштувати зміщенням елемента безпосередньо в 3D-виді.

  • Reset offset, скинути зміщення елементу.

Обмеження з більш ніж двома елементами

Вибір двох елементів геометрії та створення обмеження є інтуїтивно зрозумілим. Однак у Assembly3 є багато обмежень, які можуть приймати понад два елементів.

Коли на панелі інструментів обмежень ви бачите іконку із червоною пунктирною рамкою, наприклад Angle, це означає, що обмеження приймає третій необов’язковий елемент, такий як площина проєкції для перших двох елементів. Хоча двовимірні обмеження є більш корисними під час створення скелет-ескізу, ви можете виявити їх ефективними під час розв'язання проблеми зайвих обмежень, як спосіб зменшити кількість ступенів свободи.

Для іконок із червоною рамкою, таких як PointsVertical, це означає, що це обмеження лише 2D, а третій елемент площини проєкції є обов’язковим.

Для іконок із зеленою рамкою, наприклад AxialAlingment, це означає, що обмеження приймає кілька елементів одного типу (за кількома винятками). Розв'язувач розширить обмеження наступним чином,

Constraint
    | -- ElementLink1
    | -- ElementLink2
    | -- ElementLink3
    | -- ElementLink4

буде розширено до

Constraint1
    | -- ElementLink1
    | -- ElementLink2

Constraint2
    | -- ElementLink3
    | -- ElementLink2

Constraint3
    | -- ElementLink4
    | -- ElementLink2

Для іконок із синьою рамкою, таких як PlaneCoincident, також підтримуются декілька елементів, як і для іконок з зеленою рамкою. Крім того, обмеження має властивість Cascade, і якщо встановлено значення True, воно розширить обмеження наступним чином

Constraint
    | -- ElementLink1
    | -- ElementLink2
    | -- ElementLink3
    | -- ElementLink4

буде розширене до

Constraint1
    | -- ElementLink1
    | -- ElementLink2

Constraint2
    | -- ElementLink2
    | -- ElementLink3

Constraint3
    | -- ElementLink3
    | -- ElementLink4

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

Множення Обмеження

Існують деякі багатоелементні обмеження, які підтримують розширений режим, який називається розмноження обмежень, який використовує Link Array, щоб розмножити обмеження першого елемента на решту елементів. На момент написання цієї статті лише PlaneConicdent та AxialAlignment підтримують це. Ви можете активувати цю функцію, вибравши підтримуваний об’єкт обмеження в ієрархії документа та потім клацнувши Multiply. Є одна додаткова вимога. Для того, щоб активувати цю кнопку. Власник елемента першого обмеження має бути першим екземпляром Link Array.

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

Зверніть увагу, що першим кроком, показаним у наведеному вище відео, є заміна безпосередньо доданого об’єкта деталі на посилання, а потім зміна його на масив, встановивши властивість ElementCount. Якщо ви перетягуєте об’єкт із зовнішнього документа та кидаєте його в контейнер збірки, посилання буде створено автоматично, тому вам не потрібен крок замінити посиланням. На відео також показано, що ви можете додати більше обмежувальних елементів шляхом перетягування. І новий елемент також буде розширено. Ви можете вимкнути автоматичне розширення елемента, змінивши властивість NoExpand, як показано на наступному відео. Якщо для останнього доданого елемента NoExpand встановлено значення True, будь-які нові елементи, додані пізніше, також не будуть розширені. Це дозволяє вибрати, які саме елементи розмножувати. Ви також можете вручну керувати загальною кількістю екземплярів масиву першої деталі, вимкнувши властивість AutoCount для першого елемента.

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

Перелік обмежень

Реалізація

В Assembly3 реалізована більшість обмежень SolveSpace. Якщо ви хочете дізнатися більше про внутрішню будову, спочатку прочитайте цей документ із SolveSpace. Для того, щоб Assembly3 використовувала вирішувач, необхідно для певної Збірки,

  • Створити вільні параметри, що відповідають розміщенню кожного рухомого дочірнього об’єкта, тобто три параметри для положення та чотири параметри для його орієнтації (кватерніон).
  • Для кожного обмеження створити SolveSpace Об’єкти (Entities) (тобто точки, нормалі, повороти тощо) для кожного елемента геометрії як перетворення параметрів розміщення об’єкта його власника.
  • Створити SolveSpace Обмеження за допомогою Об'єктів (Entities), створених на попередньому кроці.
  • Дати завдання SolveSpace вирішити обмеження. SolveSpace формулює задачі обмежень як нелінійну задачу мінімізації найменших квадратів, формує рівняння символічно, а потім намагається чисельно знайти рішення для вільних параметрів.
  • Потім дочірні функції оновлюються зі знайденим рішенням.

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

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

Clone this wiki locally