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>
72 lines
2.2 KiB
Markdown
72 lines
2.2 KiB
Markdown
---
|
|
title: "IImportedSurfaceDefinition::AddCurve - пример использования"
|
|
type: guide
|
|
api: [api7]
|
|
tags: [guide, api7, addcurve]
|
|
sources:
|
|
- addcurve_example.html
|
|
---
|
|
|
|
void WorkImportedSurfaceAddCurve( KompasObject &kompas ){
|
|
int pointCountAll = 6; //кратное трем (x, y, z)
|
|
int curveCount = 3;
|
|
double x = 50, dx = 30;
|
|
double y = 50, dy = 40;
|
|
double z = 0, dz = 100;
|
|
int pointCount = pointCountAll / 3;
|
|
SAFEARRAYBOUND sabound[1];
|
|
SAFEARRAY FAR *psa;
|
|
// Создание safe array double
|
|
sabound[0].cElements = pointCountAll;
|
|
sabound[0].lLbound = 0;
|
|
psa =::SafeArrayCreate(VT_R8, 1, sabound);
|
|
VARIANT v;
|
|
VariantInit(&v);
|
|
V_VT(&v) = VT_ARRAY | VT_R8;
|
|
V_ARRAY(&v) = psa;
|
|
long index;
|
|
double d;
|
|
if ( kompas.m_lpDispatch ) {
|
|
//получить активный 3d документ
|
|
ksDocument3D doc( kompas.ActiveDocument3D() );
|
|
if ( doc.m_lpDispatch ) {
|
|
//получить компонент документа
|
|
ksPart part( doc.GetPart( pTop_Part) );
|
|
if ( part ) {
|
|
//получить новый объект импортированной поверхности
|
|
ksEntity entity(part.NewEntity(o3d_importedSurface);
|
|
if (entity) {
|
|
//Определение импортированной поверхности
|
|
ksImportedSurfaceDefinition importedSurfaceDef( entity.GetDefinition());
|
|
//добавляем в импортированную поверхность кривые по массиву точек
|
|
if (importedSurfaceDef){
|
|
for ( uint i = 0; i < curveCount; i ) {
|
|
for (uint j = 0; j < pointCount; j ) {
|
|
//наполняем safe array. Каждая точка представлена тремя координатами x, y, z
|
|
index = j*3;
|
|
d = x dx*i;
|
|
::SafeArrayPutElement(psa, &index, &d);
|
|
index = j*3 1;
|
|
d = y - dy*(i%2);
|
|
::SafeArrayPutElement(psa, &index, &d);
|
|
index = j*3 2;
|
|
d = z dz*j;
|
|
::SafeArrayPutElement(psa, &index, &d);
|
|
}
|
|
//добавить кривую по массиву точек
|
|
importedSurfaceDef.AddCurve ( v );
|
|
}
|
|
//создать импортированную поверхность
|
|
entity.Create();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
kompas.ksError( "3d документ не активизирован" );
|
|
}
|
|
//удалить safe array double
|
|
if ( psa )
|
|
::SafeArrayDestroy(psa);
|
|
}
|