Форум пользователей 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 );


Вложения:
Исходный код примера. Проверено на TerraScan 012.003
addon.zip [ 29.92 КБ | Скачиваний: 5652 ]

Автор:  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 );
}


Вложения:
Исходный код примера. Проверено на TerraScan 012.003
addon.zip [ 37.1 КБ | Скачиваний: 5625 ]

Автор:  Den [ 05/04/2012 09:56 ]
Заголовок сообщения:  Re: Вызов FnScanGetPnt из аддонов

Как вариант - использовать макросы, включающие/выключающие чек-боксы в этом окне (их запуск можно повесить на function keys - "macro {имя_макроса}"). Результат будет, в общем, тот же. Приаттачил оба макроса. mpadjust_on также открывает окно установки привязки, если оно до того было закрыто.

Вложения:
Sources.zip [ 562 байт | Скачиваний: 5636 ]
Macro.zip [ 1.03 КБ | Скачиваний: 5660 ]

Страница 1 из 1 Часовой пояс: UTC + 4 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/