Форум пользователей Terrasolid https://gisw.ru/terrum/ |
|
Вызов FnScanGetPnt из аддонов https://gisw.ru/terrum/viewtopic.php?f=4&t=3 |
Страница 1 из 1 |
Автор: | Tim [ 19/02/2012 16:26 ] |
Заголовок сообщения: | Вызов FnScanGetPnt из аддонов |
В руководстве пользователя, в разделе 19 MDL Public Functions приведен пример вызова функции FnScanGetTable. Функция FnScanGetTable не поддерживается, начиная с 011 версии. Вместо этого следует использовать следующие функции: int FnScanGetPnt( Point3d **Tbl) ; int FnScanGetCls( BYTE **Tbl) ; int FnScanGetMrk( BYTE **Tbl) ; int FnScanGetFlg( BYTE **Tbl) ; int FnScanGetInt( USHORT **Tbl) ; int FnScanGetLin( USHORT **Tbl) ; int FnScanGetDbl( double **Tbl) ; int FnScanGetEch( BYTE **Tbl) ; int FnScanGetAng( char **Tbl) ; int FnScanGetClr( RgbClr **Tbl) ; int FnScanGetScr( BYTE **Tbl) ; |
Автор: | Tim [ 19/02/2012 19:28 ] | ||
Заголовок сообщения: | Надо регистрировать публичную переменную для передачи указат | ||
Отличием этих функций от FnScanGetTable является то, что им в качестве параметра нужно передавать указатель на указатель, куда TerraScan положит результат. Для того чтобы вызывать такие функции - нужно опубликовать переменную, через которую и передавать указатель. На псевдо-коде это можно записать так: Код: static SymbolSet * Set = NULL;
static void * Ptr; CExprValue Val; CExprResult Res; int Ok; Set = mdlCExpression_initializeSet( VISIBILITY_CALCULATOR, 0, FALSE ); Ok = mdlCExpression_symbolPublish( Set, "my_addon_ptrParam", SYMBOL_CLASS_VAR, mdlCExpression_getType( TYPECODE_POINTER ), & Ptr ); Ptr = NULL; Ok = mdlCExpression_getValue( &Val, &Res, "FnScanGetPnt( &my_addon_ptrParam )", VISIBILITY_CALCULATOR ); printf( "FnScanGetPnt() returned status=%d, 0x%08X, %d points\n", Ok, Ptr, Ret );
|
Автор: | Cyrus [ 04/04/2012 11:59 ] |
Заголовок сообщения: | Re: Вызов FnScanGetPnt из аддонов |
Tim, Вы не могли бы сказать, какой командой можно прекратить (закрыть) команду Mouse Point Adjustment? Надеюсь, не сильный оффтоп) |
Автор: | Tim [ 04/04/2012 18:35 ] | ||
Заголовок сообщения: | Re: Вызов FnScanGetPnt из аддонов | ||
Cyrus, Вы имеете в виду закрыть программно? Так как такого key-in-а, судя по всему, не предусмотрено, и "Mouse Point Adjustment" не является в полном смысле "командой Майкростейшен" (которую можно было бы вытеснить просто стартовав другую команду), то приходит в голову такое решение. Можно перебрать все окна в цикле, и найдя по заголовку необходимое - закрыть его. Код: extern int Example_CloseMousePointAdjustmentWindow( void )
{ MSWindow *wnd; int res; // пробегаем по всем окнам printf( "\nStart search..\n" ); for ( wnd = mdlWindow_getFirst(); wnd; wnd = mdlWindow_getNext( wnd ) ){ char wndTitle[256] = "\0"; // смотрим какой у них заголовок res = mdlWindow_titleGet( wndTitle, sizeof( wndTitle ), wnd ); printf( "wnd:0x%08x, res=%d, title=%s\n", wnd, res, &wndTitle[0] ); if ( ( res == SUCCESS ) && ( mdlstrcmpi( wndTitle, "Mouse Point Adjustment" ) == 0 ) ){ // если тот что нам нужен - выходим из цикла break; } } if ( wnd ){ // закрываем окно, если оно нашлось по заголовку printf( "FOUND!\n" ); mdlWindow_close( wnd, 0, TRUE ); } else { printf( "NOT FOUND!\n" ); } return ( wnd ? 1 : 0 ); }
|
Автор: | Den [ 05/04/2012 09:56 ] | |||
Заголовок сообщения: | Re: Вызов FnScanGetPnt из аддонов | |||
Как вариант - использовать макросы, включающие/выключающие чек-боксы в этом окне (их запуск можно повесить на function keys - "macro {имя_макроса}"). Результат будет, в общем, тот же. Приаттачил оба макроса. mpadjust_on также открывает окно установки привязки, если оно до того было закрыто.
|
Страница 1 из 1 | Часовой пояс: UTC + 4 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |