Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Вызов FnScanGetPnt из аддонов
СообщениеДобавлено: 19/02/2012 16:26 

Зарегистрирован: 19/02/2012 14:41
Сообщения: 5
Откуда: gisw.ru
В руководстве пользователя, в разделе 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) ;
Вернуться к началу
         
Ответить с цитатой  
 Заголовок сообщения: Надо регистрировать публичную переменную для передачи указат
СообщениеДобавлено: 19/02/2012 19:28 

Зарегистрирован: 19/02/2012 14:41
Сообщения: 5
Откуда: gisw.ru
Отличием этих функций от 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 ]
Вернуться к началу
         
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов FnScanGetPnt из аддонов
СообщениеДобавлено: 04/04/2012 11:59 

Зарегистрирован: 23/02/2012 12:36
Сообщения: 2
Tim, Вы не могли бы сказать, какой командой можно прекратить (закрыть) команду Mouse Point Adjustment?

Надеюсь, не сильный оффтоп)
Вернуться к началу
         
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов FnScanGetPnt из аддонов
СообщениеДобавлено: 04/04/2012 18:35 

Зарегистрирован: 19/02/2012 14:41
Сообщения: 5
Откуда: gisw.ru
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 ]
Вернуться к началу
         
Ответить с цитатой  
 Заголовок сообщения: Re: Вызов FnScanGetPnt из аддонов
СообщениеДобавлено: 05/04/2012 09:56 

Зарегистрирован: 19/02/2012 19:36
Сообщения: 34
Откуда: Gisw.ru
Как вариант - использовать макросы, включающие/выключающие чек-боксы в этом окне (их запуск можно повесить на function keys - "macro {имя_макроса}"). Результат будет, в общем, тот же. Приаттачил оба макроса. mpadjust_on также открывает окно установки привязки, если оно до того было закрыто.
Вложения:
Sources.zip [ 562 байт | Скачиваний: 5636 ]
Macro.zip [ 1.03 КБ | Скачиваний: 5660 ]
Вернуться к началу
         
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Copyright © 2012 GISware Integro