e1337e4016
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>
76 lines
3.1 KiB
Markdown
76 lines
3.1 KiB
Markdown
---
|
|
title: "ksApproximationCurve - Аппроксимировать кривую дугами"
|
|
type: guide
|
|
api: [api7]
|
|
domain: [drawing]
|
|
tags: [guide, api7, drawing, ksapproximationcurve]
|
|
sources:
|
|
- ksapproximationcurve.html
|
|
---
|
|
|
|
*API экспортных функций > Редактирование графических объектов > Функции редактирования объектов чертежа *
|
|
|
|
|
|
## ksApproximationCurve - Аппроксимировать кривую дугами
|
|
|
|
Пример...
|
|
Аналог данной функции при использовании Automation - метод ksDocument2D::ksApproximationCurve.
|
|
Синтаксис:
|
|
```
|
|
reference ksApproximationCurve (reference p,
|
|
double eps,
|
|
unsigned char curentLayer,
|
|
double maxRad,
|
|
unsigned char smooth);
|
|
Входные параметры:
|
|
p - указатель на аппроксимируемую кривую,
|
|
eps - точность аппроксимации (от 1e-7 до 1)
|
|
curentLayer - тип размещения получившихся объектов на слоях: 0 - на слой кривой, 1 - в текущий слой,
|
|
maxRad - максимально допустимый радиус дуг, (0 - ограничение не накладывается),
|
|
smooth - признак сопряжения: 1 - гладкое, 0 - не гладкое.
|
|
Возвращаемое значение:
|
|
указатель на контур, дугу, отрезок - в случае удачного завершения,
|
|
0 - в случае неудачи.
|
|
```
|
|
Примечание:
|
|
Аппроксимируются кривые Безье, NURBS, эквидистанты, эллипсы, дуги эллипсов и контуры. Остальные кривые игнорируются.
|
|
|
|
|
|
## ksApproximationCurve - пример использования
|
|
|
|
if (ksGetCurrentDocument(1)) {
|
|
reference pObj;
|
|
RequestInfo info;
|
|
double x, y;
|
|
memset(&info, 0, sizeof(info));
|
|
info.prompt = "Укажите кривую для аппроксимации";
|
|
int j;
|
|
double eps = 0.1; //точность аппроксимации
|
|
bool curentLayer = true;//строить на текущий слой
|
|
bool delParent = false; //не удалять подложку
|
|
do {
|
|
j = Cursor(&info, &x, &y, 0);
|
|
if (j) {
|
|
if(ExistObj(pObj = FindObj(x, y, 1e6))){
|
|
j = GetObjParam(pObj, 0,0,0);
|
|
if (j == BEZIER_OBJ || j == NURBS_OBJ || j == ELLIPSE_OBJ || j == ELLIPSE_ARC_OBJ
|
|
|| j == EQUID_OBJ || j == CONTOUR_OBJ) {
|
|
reference pApp = ksApproximationCurve(pObj, // указатель на кривую
|
|
eps, // точность аппроксимации 1e-7...1
|
|
curentLayer,
|
|
0, 1);// тип размещения по слоям 0 - на слой кривой 1- в текущий слой
|
|
LightObj(pApp, 1);
|
|
if (delParent)
|
|
DeleteObj(pObj);
|
|
Message("Аппроксимированная кривая");
|
|
LightObj(pApp, 0);
|
|
}
|
|
else
|
|
Error("Неверно указана кривая для аппроксимации");
|
|
}
|
|
}
|
|
}while (j);
|
|
}
|
|
else
|
|
Error("Документ не активизирован или не является листом/фрагментом");
|