Список форумов Конференция САПР Bentley MicroStation Конференция САПР Bentley MicroStation
www.ustation.ru
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Подсветка элемента

 
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Профессиональное
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 ничего не происходит. Хотя вроде бы должно. В чем дело не пойму? Или может есть варианты по проще?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пн Июл 23, 2012 2:06 pm    Заголовок сообщения: Ответить с цитатой

В функцию mdlLocate_hiliteElement передается ElementRef, а не дескриптор
Код:
void       mdlLocate_hiliteElement  (
ElementRef       elemRef ,
DgnModelRefP       modelRef 
);


Да уж... код выглядит страшно Confused
В С++ вроде попроще...
Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
beer



Зарегистрирован: 01.02.2006
Сообщения: 215
Откуда: Москва

СообщениеДобавлено: Вт Июл 24, 2012 6:35 am    Заголовок сообщения: Ответить с цитатой

Я уж было обрадовался. Ан нет. Это я просто описался. Полностью код приводить не хотелось (на самом деле он еще страшнее Laughing ) ElementRef я передаю. Я думаю дело немного в другом тут вот почитал:
http://communities.bentley.com/products/microstation/microstation_programming/f/19569/p/51916/120095.aspx#120095
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
beer



Зарегистрирован: 01.02.2006
Сообщения: 215
Откуда: Москва

СообщениеДобавлено: Вт Июл 24, 2012 12:40 pm    Заголовок сообщения: Ответить с цитатой

На сколько я понял, но не проверял подсветка теперь работает только в динамике. Сделал через транзиенты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Профессиональное Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group