Files
kompas3d-mcp/docs/Kompas3D_SDK/guides/kschangeobjectinlibrequest.md
T
mikhail e1337e4016 feat(sdk-docs): MD-база знаний SDK — в репозиторий; генератор и зеркало убраны
docs/Kompas3D_SDK/ становится каноническим источником справки КОМПАС SDK
и включается в репозиторий (2491 файл, ~14 МБ). HTML-зеркало
docs/KOMPAS_SDK_ru-RU/ (~1.4 ГБ, © АСКОН) и генератор
tools/build_kompas3d_sdk.py больше не нужны — регенерация не предполагается.

- .gitignore: MD-база разблокирована; зеркало остаётся проигнорированным
  (safety-net на случай повторной локальной выгрузки).
- CLAUDE.md / SKILL.md: убраны упоминания регенерации и зеркала.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 20:00:05 +03:00

111 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "ksChangeObjectInLibRequest - Изменить фантом или компоненты команд"
type: guide
api: [api7]
domain: [assembly, drawing]
tags: [guide, api7, assembly, drawing, kschangeobjectinlibrequest]
sources:
- kschangeobjectinlibrequest.html
---
*API экспортных функций > Редактирование графических объектов  > Функции редактирования объектов чертежа *
## ksChangeObjectInLibRequest - Изменить фантом или компоненты команд
Пример...
Аналог данной функции при использовании Automation - метод ksDocument2D::ksChangeObjectInLibRequest.
Синтаксис:
```
int ksChangeObjectInLibRequest (RequestInfo *info, void *phantom);
Входные параметры:
info - указатель на область памяти для замены состава команд,
phantom - указатель на структуру управления фантомом.
Возвращаемое значение:
1 - в случае успешного завершения,
0 - в случае неудачи.
```
Примечание:
1. Во время работы функций Cursor и Placement может возникнуть необходимость изменить фантом или компоненты команд. Функция ksChangeObjectInLibRequest позволяет передать изменения в цикл Cursor и Placement. Это может понадобиться для отработки команд пользовательских инструментальных панелей. Предварительно нужно убедиться, что вызов Cursor и требование к Cursor передаются в одном документе. Если какой-либо указатель равен 0, соответствующий параметр не используется. Если оба параметра равны 0, процессы Cursor и Placement прерываются. Это аналогично нажатию Esc.
После завершения функции, вызвавшей останов процесса, управление будет передано в Cursor или Placement, а затем в функцию пользователя, которая вызывала Cursor или Placement.
2. При использовании Unicode следует использовать функцию ksChangeObjectInLibRequestW.
## ksChangeObjectInLibRequest - Пример использования
{
#ifndef __LIBTOOL_H
#include <libtool.h>
#endif
int type, flag=0;
//функция обратной связи для выполнения цикла в Cursor
int far __export pascal CallBackC (int com, double *x, double *y, RequestInfo *info,
void *phantom, int/* dynamic */) {
Phantom *valueub = (Phantom *)phantom;
rub->type1.ang = 90;
ksChangeObjectInLibRequest (&info, &rub);
switch (com) {
case 1:
case 2:
type = com;
break;
case -1: //поставить в модель
MoveObj(rub->type1.gr, *x, *y);
StoreTmpGroup(rub->type1.gr); //поставить временную группу в вид
ClearGroup(rub->type1.gr);
break;
}
//группа для фантома должна быть временная и обновляться при изменении вида
//отрисовки
if (rub->type1.gr)
DeleteObj(rub->type1.gr);
rub->type1.gr = NewGroup(1); // временная группа
if((flag==1 && com==1)||(flag==2 && com==2))
type = 3;
//обновляется не только изображение но и меню для запроса
switch (type ) {
case 1:
Circle (0, 0, 20, 1);
info->commands = !Квадрат !Треугольник ;
flag = 1;
break;
case 2:
LineSeg(-10, 0, 10, 0, 1);
LineSeg(10, 0, 0, 20, 1);
LineSeg(0, 20, -10, 0, 1);
info->commands = !Окружность !Квадрат;
flag = 2;
break;
case 3:
LineSeg(-10, 0, 10, 0, 1);
LineSeg(10, 0, 10, 20, 1);
LineSeg(10, 20, -10, 20, 1);
LineSeg(-10, 20, -10, 0, 1);
info->commands = !Окружность !Треугольник;
flag = 0;
break;
}
EndGroup();
return 1;
}
void Cursor_Example (void) {
type = 1;
int j = 1;
struct Phantom rub;
rub.type1.xBase = 0;
rub.type1.yBase = 0;
rub.type1.scale = 1;
rub.phType = 1;
rub.type1.ang = 0;
double x, y;
rub.type1.gr = NewGroup(1); // временная группа
Circle (0, 0, 20, 1);
EndGroup();
RequestInfo info;
memset(&info, 0, sizeof(info));
info.commands = "!Квадрат !Треугольник";
info.callBack = CallBackС;//указываем адрес функции обратной связи для Cursor,
Cursor(&info, &x, &y, &rub);
}; /* Cursor*/
}