Управління розташуванням деталі у складанні - КОМПАС у DELPHI
Системи координат
При роботі з документом-складанням ми маємо справу щонайменше з двома системами координат: глобальною та локальною. Причому локальних систем координат зазвичай є кілька.
Глобальна система координат є системою координат самої збірки. Вона не прив'язана до будь-якої деталі та її положення не може бути змінено.
Локальна система координат є системою координат окремої деталі. Кожна деталь має власну локальну систему координат і жорстко прив'язана до неї. Для більшої ясності погляньте на малюнок нижче.

На цьому малюнку зображено документ-складання, до якого було додано дві деталі. На ньому чітко видно три системи координат: глобальна (посередині) та дві локальні (по одній на кожну деталь).
Кожна деталь жорстко прив'язана до локальної системи координат. Змінити положення деталі щодо своєї локальної системи координат не можна. Але, можна змінити положення локальної системи координат щодо глобальної.
Це призведе до того, що положення деталі щодо глобальної системи координат також зміниться, проте залишиться колишнім щодо своєї локальної системи координат.
На цьому і ґрунтується зміна положення деталі у складанні. Ми переміщуємо (повертаємо) не саму деталь, та її локальну систему координат.
При додаванні деталі у складання вона розміщується так, щоб її локальна система координат збіглася з глобальною. Тому в прикладі з попереднього розділу деталі і наклалися один на одного.
Положення локальної системи координат (ksPlacement)
Положення локальної системи координат описується за допомогою інтерфейсу ksPlacement. Отримати його можна за допомогою методуGetPlacement() інтерфейсу ksPart. Властивостей інтерфейсу ksPlacement немає. Розглянемо основні його методи.
SetOrigin- встановлює нове положення центру локальної системи координат. Нижче наведено прототип цього методу.
y: Double; z: Double
Усі три параметри цього методу є нові координати центру локальної системи координат деталі. Координати задаються у глобальній системі координат.
У разі успіху цей метод повертає значення TRUE.
GetOrigin– дозволяє отримати координати центру локальної системи координат деталі у глобальній системі координат. Даний метод має такий самий прототип як і метод SetOrigin з тією різницею, що до всіх параметрів застосований кваліфікатор var. У разі успіху, метод GetOrigin повертає значення TRUE.
SetAxes– дозволяє встановити новий напрямок координатних осей. Нижче наведено прототип цього методу.
Xy: Double; Xz: Double; Yx: Double; Yy: Double; Yz: Double
Параметри Xx, Xy і Xz є координати точки, через яку проходить і в бік якої спрямована координатна вісь Ox локальної системи координат.
Параметри Yx,Yy і Yz є координати точки, через яку проходить і в бік якої спрямована координатна вісь Oy локальної системи координат.
Напрямок координатної осі Oz визначається з напрямків координатних осей Ox та Oy автоматично самою системою КОМПАС.
Всі координати цього методу задаються в локальній системі координат деталі.
У разі успіху, метод повертає значення TRUE.
SetAxis- дозволяє задати напрямок однієї з координатних осей (або Ox, або Oy). Нижче наведено прототип цього методу.
x: Double; y: Double; z: Double;
type_: Integer//Ознака осі
Перші три параметри даного методу є координати точки, через яку проходить і в бік якої направлена координатна вісь.
Параметр type_ вказує на те, напрям якої координатної осі (Ox або Oy) ми змінюємо. Якщо значення цього параметра дорівнює нулю, ми змінюємо напрямок осі Ox. Якщо значення цього параметра більше нуля, ми змінюємо напрям осі Oy. Інші значення цього параметра в
документації не описано.
Координати точки задаються у глобальній системі координат. У разі успіху цей метод повертає значення TRUE.
GetAxis– дозволяє отримати напрямок заданої координатної осі. Даний метод має той же прототип, що і метод SetAxis, але з двома відмінностями: 1) до параметрів x, y і z застосований кваліфікатор var; 2) розширено допустимі значення параметра type_.
Якщо значення параметра type_ дорівнює нулю, ми запитуємо напрямок осі Ox. Якщо значення параметра type_ дорівнює одиниці, ми запитуємо напрямок осі Oy. Якщо значення параметра type_ більше одиниці, ми запитуємо напрям осі Oz.
У разі успіху цей метод повертає значення TRUE.
З розташуванням локальної системи координат пов'язаний ще один важливий метод інтерфейсу ksPart.
UpdatePlacement() – оновлює розташування деталі. Цей метод
потрібно викликати після будь-якої зміни розташування деталі.
Приклад 1. Переміщення деталі
Для переміщення деталі достатньо змінити координати центру локальної системи координат деталі.
Нижче наведено ключовий фрагмент вихідного тексту програми, що демонструє просте переміщення деталі.
kompas: KompasObject; Document3D: ksDocument3D; Part: ksPart;
Placement: ksPlacement; path: string;
//Підключаємося до КОМПАСУ
//Отримуємо інтерфейс документа-складання
//Отримуємо інтерфейс моделі
//Додаємо модель у складання
//Отримуємо інтерфейс доданої моделі у складанні Part:=ksPart(Document3D.GetPart(0));
//Отримуємо інтерфейс розташування моделі Placement:=ksPlacement(Part.GetPlacement());
//Встановлюємо нове положення центру координат моделі
//Оновлюємо розташування моделі
//Встановлюємо напівтонове відображення
//Включаємо відображення каркаса
//Робимо КОМПАС видимим
На малюнку нижче показано результат роботи цієї програми.

Зверніть увагу, що локальна система координат деталі, як і сама деталь, зміщена щодо глобальної системи координат.
Джерело: Сергій Сергій, «РОЗРОБКА ДОДАТКІВ ПІД КОМПАС В DELPHI»