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>
161 lines
4.6 KiB
Markdown
161 lines
4.6 KiB
Markdown
---
|
|
title: "Пример изменения порядка NURBS"
|
|
type: guide
|
|
api: [api7]
|
|
tags: [guide, api7, example]
|
|
sources:
|
|
- example_nurbs_degree.html
|
|
---
|
|
|
|
|
|
## Пример изменения порядка NURBS
|
|
|
|
Изменить порядок NURBS кривой на 4.
|
|
nurbs.Degree = 4 нужно устанавливать не раньше, чем в NURBS кривую добавятся 4 точки.
|
|
nurbs = nurbses.Add()
|
|
nurbs.Style = kompas6_constants.ksCSNormal
|
|
nurbs.Closed = False
|
|
#nurbs.Degree = 4
|
|
nurbs.AddPoint(0, 49.7220581829, 124.864112265, 1.0)
|
|
nurbs.AddPoint(1, 79.97915965, 161.394027451, 1.0)
|
|
nurbs.AddPoint(2, 110.974239202, 124.864112265, 1.0)
|
|
nurbs.AddPoint(3, 173.702376389, 181.688424777, 1.0)
|
|
nurbs.Degree = 4
|
|
nurbs.Update()
|
|
|
|
|
|
## Пример использования утилиты
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Интерфейс связи с вспомогательным контроллером
|
|
// ---
|
|
_COM_SMARTPTR_TYPEDEF(IWow32Util, __uuidof(IWow32Util));
|
|
IWow32UtilPtr wow32Util;
|
|
//--------------------------------------------------------------------------------
|
|
// Соединение в вспомогательному Win32 приложению (exe) для получения доступа
|
|
// к 32 разрядным драйверам для которых не найдены 64 разрядные аналоги
|
|
// ---
|
|
IWow32UtilPtr GetWow32Util()
|
|
{
|
|
if ( !(bool)wow32Util )
|
|
{
|
|
try
|
|
{
|
|
wow32Util.CreateInstance( _T("Wow32Util.Application") );
|
|
}
|
|
catch ( _com_error & )
|
|
{
|
|
}
|
|
}
|
|
return wow32Util;
|
|
}
|
|
//-----------------------------------------------------------------------------
|
|
// Создание интерфейса во внешнем 32 разрядном приложении
|
|
//---
|
|
IDispatchPtr CreateWow32Interface( LPCTSTR ClassID )
|
|
{
|
|
IDispatchPtr res;
|
|
IWow32UtilPtr util( GetWow32Util() );
|
|
if ( util )
|
|
{
|
|
try
|
|
{
|
|
_bstr_t id( ClassID );
|
|
util->CreateWow32Interface( id, &res );
|
|
}
|
|
catch (_com_error&)
|
|
{
|
|
//AR todo ComErrorMessage
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
//-----------------------------------------------------------------------------
|
|
// Создание интерфейса во внешнем 32 разрядном приложении
|
|
//---
|
|
#pragma comment( lib, "rpcrt4.lib" )
|
|
_LIBFUNC(IDispatchPtr) CreateWow32Interface( const CLSID& rclsid )
|
|
{
|
|
_TUCHAR * str = NULL;
|
|
if ( RPC_S_OK != UuidToString((UUID *)&rclsid, &str) || !str )
|
|
return NULL;
|
|
_bstr_t classId( "{" );
|
|
classId += str;
|
|
classId += _T("}");
|
|
IDispatchPtr res( CreateWow32Interface(classId) );
|
|
RpcStringFree( &str );
|
|
return res;
|
|
}
|
|
#define JET_OLED_PROVIDER _T("Provider=Microsoft.Jet.OLEDB.4.0")
|
|
#define ACE_OLED_PROVIDER _T("Provider=Microsoft.ACE.OLEDB.12.0")
|
|
static bool usesJET_OLED_PROVIDER = false;
|
|
static bool usesWOW32_PROVIDER = false;
|
|
//-----------------------------------------------------------------------------
|
|
/// Создать подключение к БД
|
|
/**
|
|
param fullFileName - Полный путь + имя файла
|
|
param forWrite - Для записи
|
|
*/
|
|
// ---
|
|
ado::_ConnectionPtr ExcelDataBaseADO::OpenConnection( LPCTSTR fullFileName, bool forWrite )
|
|
{
|
|
ado::_ConnectionPtr pConnection;
|
|
try
|
|
{
|
|
// Создадим соединение
|
|
#ifdef _WIN64
|
|
if ( usesWOW32_PROVIDER )
|
|
pConnection = CreateWow32Interface( __uuidof( ado::Connection ) );
|
|
else
|
|
#endif
|
|
pConnection.CreateInstance(__uuidof( ado::Connection ));
|
|
// Открываем соединение с БД( если файл excel не существует то он создасться)
|
|
if ( pConnection )
|
|
{
|
|
CString connName = usesJET_OLED_PROVIDER ? JET_OLED_PROVIDER : ACE_OLED_PROVIDER;
|
|
connName += _T(";Data Source=");
|
|
connName += fullFileName;
|
|
connName += _T(";Extended Properties="Excel 8.0;HDR=NO;");
|
|
if ( !forWrite )
|
|
connName += _T("IMEX=1;");
|
|
connName += _T(""");
|
|
pConnection->Open( (LPCTSTR)connName, _T(""), _T(""), 0 );
|
|
}
|
|
}
|
|
#ifdef _DEBUG
|
|
catch ( _com_error & er )
|
|
{
|
|
if ( usesJET_OLED_PROVIDER && usesWOW32_PROVIDER )
|
|
::ComErrorMessage( er );
|
|
pConnection = NULL;
|
|
}
|
|
#else
|
|
catch ( _com_error& )
|
|
{
|
|
pConnection = NULL;
|
|
}
|
|
#endif
|
|
if ( !(bool)pConnection && !usesJET_OLED_PROVIDER )
|
|
{
|
|
usesJET_OLED_PROVIDER = true;
|
|
pConnection = OpenConnection( fullFileName, forWrite );
|
|
usesJET_OLED_PROVIDER = false;
|
|
#ifdef _WIN64
|
|
if ( !(bool)pConnection && !usesWOW32_PROVIDER )
|
|
{
|
|
usesWOW32_PROVIDER = true;
|
|
pConnection = OpenConnection( fullFileName, forWrite );
|
|
// usesWOW32_PROVIDER = false;
|
|
}
|
|
#endif
|
|
}
|
|
return pConnection;
|
|
}
|
|
Получение интерфейса Recordset также требуется делать через CreateWow32Interface
|
|
#ifdef _WIN64
|
|
if ( usesWOW32_PROVIDER )
|
|
rset = CreateWow32Interface(_T("ADODB.Recordset"));
|
|
else
|
|
#endif
|
|
rset.CreateInstance(_T("ADODB.Recordset"));
|