beer
Зарегистрирован: 01.02.2006 Сообщения: 215 Откуда: Москва
|
Добавлено: Пн Июл 23, 2012 11:52 am Заголовок сообщения: Подсветка элемента |
|
|
Задача проста, есть две модели одна предположим отображается в первом видовом окне вторая во втором. Во второй модели есть элемент в котором с помощью UserData прописан элемент, который находится в ассоциированном файле первой модели. Мне при выборе первого элемента (это который во второй модели) мне нужно подсветить второй элемент. делаю примерно так:
Код: |
public enum SelectionSetAction
{
SELECT_NOTHING = 0,
SELECT_STRETCH = 1,
SELECT_WINDOW = 2,
SELECT_DRAG = 3,
SELECT_DRAG_NEW = 4,
SELECT_NEW = 5,
SELECT_SS_EMPTY = 6,
SELECT_REMOVE = 7,
SELECT_SS_CHANGED = 8,
SELECT_SS_CHANGING = 9,
SELECT_DOUBLECLICK_HANDLE = 10,
SELECT_DOUBLECLICK_ELEMENT = 11,
};
public enum MDL_LOCATE_Callbacks
{
LOCATE_ELEMENT_LOCATED = 2 ,
LOCATE_PRELOCATE = 3 ,
LOCATE_POSTLOCATE = 4 ,
LOCATE_ACCEPTFUNC = 5 ,
LOCATE_SHOWFUNC = 6 ,
LOCATE_CLEANFUNC = 7 ,
LOCATE_NOTFOUNDFUNC = 8 ,
LOCATE_GLOBAL_LOCATE = 9 ,
LOCATE_SELECT_CMD = 10 ,
LOCATE_GLOBAL_PRELOCATE = 11 ,
LOCATE_PROVIDE_PATH_DESCRIPTION = 12 ,
LOCATE_ELEMENT_DOUBLECLICK = 13 ,
};
public unsafe delegate int Select_UserFunction(SelectionSetAction* action, UInt32 filePos, IntPtr modelRef);
[DllImport("ustation.dll", CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)]
public static extern unsafe void mdlLocate_setFunction(MDL_LOCATE_Callbacks type, Select_UserFunction function);
public static unsafe Select_UserFunction SelfuncP = new Select_UserFunction(MySelectFunction);
public static unsafe int MySelectFunction(SelectionSetAction* action, UInt32 filePos, IntPtr modelRef)
{
switch (*action)
{
case SelectionSetAction.SELECT_SS_EMPTY:
mdlLocate_init();
break;
case SelectionSetAction.SELECT_NEW:
IntPtr elDescrP;
mdlElmdscr_read(out elDescrP, filePos, modelRef, 0, out filePos);
elDescrP = НайтиДескрипторСсылочногоЭлемента(elDescrP, out modelRef);
// До этого момента все работает правильно
mdlLocate_hiliteElement(elDescrP, modelRef);
Break;
}
}
public void ВызываемГдеТоТамПриСтартеСтейшена()
{
mdlLocate_setFunction(MDL_LOCATE_Callbacks.LOCATE_SELECT_CMD, SelfuncP);
}
|
И вот собственно на вызове mdlLocate_hiliteElement ничего не происходит. Хотя вроде бы должно. В чем дело не пойму? Или может есть варианты по проще? |
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Пн Июл 23, 2012 2:06 pm Заголовок сообщения: |
|
|
В функцию mdlLocate_hiliteElement передается ElementRef, а не дескриптор
Код: | void mdlLocate_hiliteElement (
ElementRef elemRef ,
DgnModelRefP modelRef
); |
Да уж... код выглядит страшно
В С++ вроде попроще...
|
|