Лінія-виноска - КОМПАС у DELPHI
Складовий рядок (ksTextLineParam)
Інтерфейс ksTextLineParam використовується для опису рядка, що складається з рядкових елементів. Отримати цей інтерфейс можна за допомогою методу GetParamStruct інтерфейсу KompasObject, для цього як єдиний параметр даного методу потрібно передати значення константи ko_TextLineParam. Розглянемо властивості інтерфейсу ksTextLineParam.
style– це номер системного стилю тексту. Допустимі номери системних стилів текстів наводилися в розділі 22. Для лінії винесення окремого системного стилю тексту не передбачено, тому ми в якості значення даної властивості будемо вказувати значення нуль. Це говорить про те, що для даного об'єкта слід використовувати системний стиль тексту, передбачений для нього за умовчанням.
Тепер розглянемо методи інтерфейсу ksTextLineParam.
GetTextItemArr()– повертає інтерфейс динамічного масиву ksDynamicArray (див. розділ 22) компонентів рядка ksTextItemParam (див. розділ 5).
SetTextItemArr– встановлює новий масив компонентів рядка. Інтерфейс встановлюваного масиву (ksDynamicArray) приймається як єдиний параметр методу. У разі успіху, метод повертає значення TRUE.
Init()– виконує ініціалізацію (обнулення) всіх властивостей даного методу. У разі успіху повертає значення TRUE.
Параметри лінії-виноски (ksLeaderParam)
Інтерфейс ksLeaderParam визначає параметри лінії-виноски. Отримати цей інтерфейс за допомогою методу GetParamStruct інтерфейсу KompasObject. Для цього як єдиний параметр йому потрібно надати значення константи ko_LeaderParam. Розглянемо властивості інтерфейсу lsLeaderParam.
around– означає наявність на лінії-винесення знаку обробки по контуру. Якщо значення цієї властивості дорівнює нулю, знака немає. Якщо ж
значення цієї властивості дорівнює одиниці, то знак обробки за контуром є. На малюнку нижче дві лінії-виноски без знака обробки по контуру (ліворуч) та зі знаком обробки по контуру (праворуч).

arrowType– тип покажчика лінії-виноски. У таблиці нижче представлені допустимі значення цієї властивості.
У вигляді верхньої половини стрілки
У вигляді нижньої половини стрілки
cText0– кількість рядків над полицею лінії-виноски. Де і як задаються ці рядки, буде розказано нижче.
cText1– кількість рядків під полицею лінії-виноски.
cText2– кількість рядків над «ніжкою» лінії-виноски (не більше однієї).
cText3– кількість рядків під «ніжкою» лінії-виноски (не більше однієї).
dirX– напрямок полиці лінії-виноски. У таблиці нижче представлені допустимі значення цієї характеристики.
полиця орієнтована праворуч1
полиця орієнтована вліво
полиця орієнтована праворуч
полиця орієнтована нагору
полиця орієнтована вниз
signType– тип знака на «ніжці» лінії-виноски. У таблиці нижче представлені допустимі значення цієї характеристики.
1 Згідно з документацією при dirX рівному нулю полиці немає. Однак, на практиці, полиця орієнтована праворуч
немає жодного знаку
знак з'єднання внахлестку металевими скобами
знак кутового з'єднання металевими скобами
знак монтажного шва
xіy– координати точки початку полиці, точка її з'єднання з
Тепер розглянемо методи інтерфейсу ksLeaderParam.
GetpPolyline()– повертає інтерфейс масиву «ніжок» лінії-виноски. Масивзадається як інтерфейс ksDynamicArray (див. розділ 22). Кожна «ніжка» є ламаною. На малюнку нижче показано приклад такої ламаної "ніжки".

Елементами масиву, що повертається методом GetpPolyline, є масиви ksDynamicArray математичних точок ksMathPointParam (див. розділ 29).
Тобто за фактом метод GetpPolyline повертає двовимірний динамічний масив крапок.
Кожен дочірній масив визначає окрему «ніжку» лінії-виноски. Кожна «ніжка» будується від базової точки лінії-виноски (її координати визначаються значеннями властивостей x і y, і в масиві не вказуються) за точками, вказаними в масиві, в порядку їхнього прямування.
SetpPolyline– встановлює новий масив «ніжок» лінії-виноски. Інтерфейс нового масиву ksDynamicArray приймається як єдиний параметр методу. У разі успіху цей метод повертає значення TRUE.
GetpTextline()– повертає динамічний масив ksDynamicArray рядків тексту ksTextLineParam. Рядки в цьому масиві випливають у наступному порядку: рядки над полицею (їх кількість задається властивістю cText0); рядки під полицею (їх кількість задається властивістю cText1); рядки над
"ніжкою" (їх кількість задається властивістю cText2); рядки під «ніжкою» (їх кількість визначається властивістю cText3).
Рядки над (під) полицею утворюють один рядок. Для більшої ясності на малюнку нижче показана лінія виноски, в якій виводиться два рядки над полицею і два рядки під полицею.
Рядок над (під) «ніжкою» не може бути більше однієї.
SetpTextline– встановлює новий масив рядків. Новий масив задається інтерфейсом ksDynamicArray (див. Розділ 22). У разі успіху, метод повертає значення TRUE.
Init()– виконує ініціалізацію (обнулення)значень властивостей даного інтерфейсу та перетворює динамічні масиви.
Побудова лінії-виноски
Для побудови лінії-винесення використовується метод ksLeader інтерфейсу ksDocument2D. Як єдиний параметр даний метод приймає інтерфейс параметрів лінії-виноски ksLeaderParam.
У разі успіху метод ksLeader повертає числовий ідентифікатор збудованої лінії-виноски. А у разі помилки – значення нуль.
Приклад 1. Проста лінія-виноска
Нижче наводиться ключовий фрагмент вихідного тексту програми, де демонструється побудова простий лінії-виноски.
kompas: KompasObject; Document2D: ksDocument2D; LeaderParam: ksLeaderParam;
DynamicArray, DynamicArray2: ksDynamicArray; MathPointParam: ksMathPointParam; TextLineParam: ksTextLineParam; TextItemParam: ksTextItemParam;
//Отримуємо інтерфейс параметрів лінії виноскиLeaderParam:=ksLeaderParam(kompas.GetParamStruct(ko_LeaderParam)); LeaderParam.around := 0;//Без значка по колу
LeaderParam.arrowType := 0;//Без покажчикаLeaderParam.cText0 := 1;//над полицею лінії-виноскиLeaderParam.cText1 := 0;//під полицею лінії-виноскиLeaderParam.cText2 := 0;//над ніжкоюLeaderParam.cText3 := 0;//під ніжкоюLeaderParam.dirX := 1;//полку вправоLeaderParam.signType := 0;//без знака на полиці
//Координати базової точки
//Отримуємо масив "ніжок"DynamicArray:=ksDynamicArray(LeaderParam.GetpPolyline()); DynamicArray.ksClearArray();
//Підготовляємо масив точок
//Отримуємо інтерфейс параметрів математичної точки
MathPointParam := ksMathPointParam(kompas.GetParamStruct(ko_MathPointParam)); MathPointParam.x := 100;
//Додаємоточку масив точок
//Додаємо масив точок в масив "ніжок"
//Отримуємо масив елементів ksTextLineParam
DynamicArray := ksDynamicArray(LeaderParam.GetpTextline()); DynamicArray.ksClearArray();
//Отримуємо інтерфейс ksTextLineParam
TextLineParam.style:=0;//Стиль тексту за умовчанням
//Отримуємо масив елементів ksTextItemParam
DynamicArray2 := ksDynamicArray(TextLineParam.GetTextItemArr()); DynamicArray2.ksClearArray();
//Отримуємо інтерфейс ksTextItemParam
TextItemParam := ksTextItemParam(kompas.GetParamStruct(ko_TextItemParam)); TextItemParam.type_:=0;//рядок
TextItemParam.s := ‘1’;//сама рядок
//Додаємо інтерфейс ksTextItemParam у відповідний масив
//Додаємо інтерфейс ksTextLineParam у відповідний масив
// Будуємо саму лінію-виноскуDocument2D.ksLeader (LeaderParam); kompas.Visible:=true;
В результаті роботи цієї програми буде побудовано лінію-виноску як на малюнку нижче.

Джерело: Сергій Сергій, «РОЗРОБКА ДОДАТКІВ ПІД КОМПАС В DELPHI»