Files
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

5.1 KiB
Raw Permalink Blame History

title, type, api, tags, sources
title type api tags sources
ksGetCurvePerimeter - Получить длину периметра кривой guide
api7
guide
api7
ksgetcurveperimeter
ksgetcurveperimeter.html

*API экспортных функций > Функции работы с графическим документом  > Вспомогательные построения  > Функции вычисления длин, расстояний, углов и МЦХ *

ksGetCurvePerimeter - Получить длину периметра кривой

Пример... Аналог данной функции при использовании Automation - метод ksMathematic2D::ksGetCurvePerimeter. Синтаксис:

double ksGetCurvePerimeter (reference curve,
unsigned char dimension);
Входные параметры:
curve    - указатель на кривую,
dimension    - размерность длины.
Размерности длины...
Возвращаемое значение:
длина периметра кривой    - в случае успеха,
0    - в случае неудачи.

ksGetCurvePerimeter, ksCalcInertiaProperties, ksCalcMassInertiaProperties - пример использования

reference pObj; RequestInfo info; double x, y; memset(&info, 0, sizeof(info)); info.prompt = "Укажите кривую"; int j = Cursor(&info, &x, &y, 0); if (j) { if(ExistObj(pObj = FindObj(x, y, 1e6))){ //узнаем тип объекта int type = GetObjParam( pObj,0,0,0); //указатель на графический объект if (type == CIRCLE_OBJ || //окружность type == ARC_OBJ || //дуга type == NURBS_OBJ || //nurbs type == LINESEG_OBJ || //отрезок type == BEZIER_OBJ || //bezier type == CONTOUR_OBJ || //контур type == POLYLINE_OBJ || //полилиния type == ELLIPSE_OBJ || //эллипс type == ELLIPSE_ARC_OBJ || //дуга эллипса type == RECTANGLE_OBJ || //прямоугольник type == REGULARPOLYGON_OBJ //многоугольник ) { //периметр кривой double perimeter = ksGetCurvePerimeter(pObj, ST_MIX_MM); //указатель на кривую char buf[255]; sprintf(buf, "Периметр = %f", perimeter); Message(buf); InertiaParam inertiaPar; //рассчитаем плоские моментно - центровочные характеристики кривой int rez = ksCalcInertiaProperties(pObj, //указатель на кривую или группу кривых &inertiaPar, //указатель на структуру моментно-центровочных характеристик ST_MIX_MM); //размерность в интервале [ST_MIX_SM..ST_MIX__M] if (rez) { sprintf(buf, "Центр xc = %f yc = %f площадь = %f", inertiaPar.xc, inertiaPar.yc, inertiaPar.f); Message(buf); sprintf(buf, "Моменты инерции относительно исходных осей x и y\nlx = %f ly = %f lxy = %f", inertiaPar.lx, inertiaPar.ly, inertiaPar.lxy); Message(buf); sprintf(buf, "Центральные моменты инерции\nmx = %f my = %f mxy = %f", inertiaPar.mx, inertiaPar.my, inertiaPar.mxy); Message(buf); sprintf(buf, "Главные центральные моменты инерции\njx = %f jy = %f угол = %f", inertiaPar.jx, inertiaPar.jy, inertiaPar.a); Message(buf); MassInertiaParam mInertiaPar; //для тела выдавливания моментно-центровочные характеристики rez = ksCalcMassInertiaProperties(pObj, // указатель на кривую или группу кривых &mInertiaPar, // указатель на структуру массово-центровочных характеристик ST_MIX_MM|ST_MIX_GR|ST_MIX_EXT , // набор флагов 2.7, // плотность (г/мм3) 100); // если тело вращения-угол раствора в градусах, тело выдавливания - толщина if (rez) { sprintf(buf, "плотность = %f масса = %f объем = %f", mInertiaPar.r, mInertiaPar.m, mInertiaPar.v); Message(buf); sprintf(buf, "координаты центра тяжести\n xc= %f yc = %f zc = %f", mInertiaPar.xc, mInertiaPar.yc, mInertiaPar.zc); Message(buf); sprintf(buf, "центробежные моменты инерции\n lxy= %f lxz = %f lyz = %f", mInertiaPar.lxy, mInertiaPar.lxz, mInertiaPar.lyz); Message(buf); sprintf(buf, "осевые моменты инерции\n lx= %f ly = %f lz = %f", mInertiaPar.lx, mInertiaPar.ly, mInertiaPar.lz); Message(buf); sprintf(buf, "плоскостные моменты инерции\n jy0z= %f jx0z = %f lx0y = %f", mInertiaPar.jy0z, mInertiaPar.jx0z, mInertiaPar.jx0y); Message(buf); sprintf(buf, "Главные центробежные моменты инерции\n jxy= %f jxz = %f jyz = %f", mInertiaPar.jxy, mInertiaPar.jxz, mInertiaPar.jyz); Message(buf); sprintf(buf, "Главные осевые моменты инерции \n jx= %f jy = %f jz = %f", mInertiaPar.jx, mInertiaPar.jy, mInertiaPar.jz); Message(buf); } } else Error ("Ошибка"); } else Error("Выбранный объект не кривая"); } }