---
title: "ksChoiceFragmentFromLib - Выбрать имя фрагмента, хранящегося в библиотеке фрагментов"
type: guide
api: [api7]
tags: [guide, api7, kschoicefragmentfromlib]
sources:
  - kschoicefragmentfromlib.html
---

*API экспортных функций > Функции работы с графическим документом  > Функции работы с фрагментами и библиотеками фрагментов  > Функции работы с фрагментами  > Библитеки фрагментов *


## ksChoiceFragmentFromLib - Выбрать имя фрагмента, хранящегося в библиотеке фрагментов

Пример...
Аналог данной функции при использовании Automation - метод ksFragmentLibrary::ksChoiceFragmentFromLib
Синтаксис:
```
int ksChoiceFragmentFromLib (char * fileLibFrw,
char * nameFrw,
unsigned int size);
Входные параметры:
fileLibFrw    - полное имя библиотеки фрагментов,
size    - размер буфера фрагмента.
Выходные параметры:
nameFrw    - имя фрагмента.
Возвращаемое значение:
3    - имя фрагмента,
2    - имя папки,
1    - корень библиотеки фрагментов,
0    - в случае неудачи.
```
Примечание:
1. Библиотека фрагментов открывается в режиме диалога. Ее редактирование запрещено. Нажатие <Enter> - выбор имени фрагмента. <Esc> - отказ.
2. При использовании Unicode следует использовать функцию ksChoiceFragmentFromLibW.


## ksChoiceFragmentFromLib - Пример использования

char libName[250];
int j1;
//выберем библиотеку фрагментов
if (ChoiceFile ("*.lfr","Библиотеки фрагментов(*.lfr)|*.lfr|Все файлы (*.*)|*.*|", libName, 128))
{
char buf[250];
do
{
//выбрать фрагмент в библиотеке фрагментов
if ((j1 = ksChoiceFragmentFromLib(libName, buf, 250))!=0)
{
//выделим имя вставки
char * insertName = strrchr (buf, '|');
if (insertName)
{
double x, y;
//подготовим структуры фантома и запросов для Placement
struct Phantom rub;
rub.type1.xBase = 0;
rub.type1.yBase = 0;
rub.type1.scale = 1;
rub.phType = 1;
reference pDefFrg;
// создадим описание вставки фрагментов
pDefFrg = FragmentDefinition (buf, //имя файла фрагмента
insertName1, //имя вставки
1); // внешней ссылкой
if (pDefFrg)
{
//во временную группу положим вставку фрагмента,
//взятую из библиотеки фрагментов
rub.type1.gr = NewGroup (1); // временная группа
PlacementParam par;
par.xBase = 0;
par.yBase = 0;
par.ang = 0;
par.scale = 1 ;
//создаем объект "вставка фрагмента"
reference p = InsertFragment (pDefFrg, // Указатель
//определения фрагмента
0, // на свои слои
&par); //параметры привязки
EndGroup();
int j;
do
{
rub.type1.ang = 0;
//запрос точки и угла поворота фрагмента
if ((j = Placement (NULL, &x, &y, &rub.type1.ang, &rub))!=0)
{
CopyObj (p, // указатель на графический объект
0,0, // базовая точка объекта
x, y, // точка, в которую копировать
1, // масштаб
rub.type1.ang ); // угол поворота а градусах
}
}
while (j);
DeleteObj (rub.type1.gr);
}
else
Error ("ошибка создания описания вставки фрагмента");
}
else
Error("имя вставки не определено");
}
}
while(j1);
}
