Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: begiz от 19-07-2016, 13:59:09

Название: GsPreviewCtrl и значек координат или viewcude
Отправлено: begiz от 19-07-2016, 13:59:09
Добрый день,
использую GsPreviewCtrl, всё работает
Вот появился заказ добавить в этот View значек системы координат ну или ViewCube (чтобы ориентироваться проше было).
даже не знаю с чего начать.

видел такую функцию acedCreateViewCube, но я на 2015 Acad.
Подскажите куда копать и возможно ли это сделать впринципе.
Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: Александр Ривилис от 19-07-2016, 14:05:59
видел такую функцию acedCreateViewCube, но я на 2015 Acad.
А что с ней не так в AutoCAD 2015? Она есть как минимум с AutoCAD 2009 до AutoCAD 2017 включительно.
Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: begiz от 19-07-2016, 14:14:58
Виноват,
промахнулся походу буковкой когда по документации 2015 поиск делал.
Но в Visual Studio она у мения undefined, мозет include нужен какой то дополнительный?

И как её использовать?

нашел такую ссылку
https://forums.autodesk.com/t5/objectarx/acedviewcube/td-p/3549492 (https://forums.autodesk.com/t5/objectarx/acedviewcube/td-p/3549492)

говорят что только 1 может быть
Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: Александр Ривилис от 19-07-2016, 14:26:04
Но в Visual Studio она у мения undefined, мозет include нужен какой то дополнительный?
#include <AcEdViewCube.h>
И как её использовать?
Не знаю - не пробовал.
нашел такую ссылку
https://forums.autodesk.com/t5/objectarx/acedviewcube/td-p/3549492
говорят что только 1 может быть
Это в редакторе AutoCAD может быть только один, а в твоем AcGsView может быть другой.
Попробуй. В противном случае у тебя только один вариант - использовать транзитную графику для рисования, как предложили  Fenton Webb и Kean Walmsley
Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: begiz от 19-07-2016, 15:03:38
с функцией всё просто получилось (ViewCube добавился и даже крутится).
Но что касается значка начала координат, то только временной графикой можно решить?
Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: Александр Ривилис от 19-07-2016, 15:17:08
с функцией всё просто получилось (ViewCube добавился и даже крутится).
Но что касается значка начала координат, то только временной графикой можно решить?
Как-то по образцу и подобию класса OrbitGadget (из GsPreviewCtrl.h) ты можешь сделать иконку UCS. Готового инструмента нет.
Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: begiz от 19-07-2016, 19:54:15
похоже рано я порадовался.
ViewCube создался, отображается и даже крутится когда орбит(CsPreviewCtrl) делаешь.
Но никак не реагирует на мышь.
Пробовал вызывать родные onLButtonDown, onLButtonUp, onMouseMove не помогло...
Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: Александр Ривилис от 20-07-2016, 01:20:19
Но никак не реагирует на мышь.
Реагирует. Но нужно пересчитать координаты:

Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: Александр Ривилис от 20-07-2016, 02:40:33
Еще с тестовым dwg-файлом:

Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: begiz от 20-07-2016, 07:35:23
Цитировать
Реагирует. Но нужно пересчитать координаты:
А какие координаты нужны?
Пробовал ScreenToClient и ClientToScreen. или просто смещение какое-то нужно?
полученые координаты нужно передавать в mpViewCube->onMouseMove()?

Код - C++ [Выбрать]
  1. void CGsPreviewCtrl::OnMouseMove(UINT nFlags, CPoint point)
  2. {
  3.   // is the GsView valid
  4.  
  5.   if (mpView)
  6.   {
  7.           mpViewCube->onMouseMove(nFlags, point);
  8.           .........
  9.  

AcEdViewCube * mpViewCube;
Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: Александр Ривилис от 20-07-2016, 11:32:21
Я выложу полный проект, а ты в нём покопайся. Там тоже не доведено всё до конца, но как видишь на видео, куб работает.
Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: begiz от 06-02-2022, 15:35:52
не прошло и 6 лет...
методом научного тыка нашел какие координаты нужно передавать в AcEdViewCube
понятия не имею почему и как, но на 2 проектах с разной компоновкой контролов у меня работает
Код - C++ [Выбрать]
  1. #define MAGIC_TOP_NUMBER 797
  2. void CGsPreviewCtrl::OnLButtonDown(UINT nFlags, CPoint point)
  3. {
  4.   HWND hWnd = GetParent()->GetSafeHwnd();
  5.   RECT rcChild;
  6.   ::GetWindowRect(GetSafeHwnd(), &rcChild);
  7.   ::MapWindowPoints(NULL, hWnd, (LPPOINT)&rcChild, 2);
  8.  
  9.   mpAcEdViewCube->onLButtonDown(nFlags, CPoint(point.x, point.y + MAGIC_TOP_NUMBER - (rcChild.bottom - rcChild.top)));
  10. ...
  11. }
  12.  
  13. void CGsPreviewCtrl::OnLButtonUp(UINT nFlags, CPoint point)
  14. {
  15.  
  16.   HWND hWnd = GetParent()->GetSafeHwnd();
  17.   RECT rcChild;
  18.   ::GetWindowRect(GetSafeHwnd(), &rcChild);
  19.   ::MapWindowPoints(NULL, hWnd, (LPPOINT)&rcChild, 2);
  20.  
  21.   mpAcEdViewCube->onLButtonUp(nFlags, CPoint(point.x, point.y + MAGIC_TOP_NUMBER - (rcChild.bottom - rcChild.top)));
  22. ...
  23. }
  24.  
  25. void CGsPreviewCtrl::OnMouseMove(UINT nFlags, CPoint point)
  26. {
  27.   HWND hWnd = GetParent()->GetParent()->GetSafeHwnd();
  28.   RECT rcChild;
  29.   ::GetWindowRect(GetSafeHwnd(), &rcChild);
  30.   ::MapWindowPoints(NULL, hWnd, (LPPOINT)&rcChild, 2);
  31.  
  32.   mpAcEdViewCube->onMouseMove(nFlags, CPoint(point.x, point.y + MAGIC_TOP_NUMBER - (rcChild.bottom - rcChild.top)));
  33. ...
  34. }
  35.  
  36.  


ну раз этот куб начал работат возникло еще 2 вопроса
1. как зафиксировать первично инициализированый вид как "Home" что бы можно было туда вернутся
пробовал mpAcEdViewCube->setHomeCamera(homeView);
но не пойму как правельно настроить этот объект. если беру тут что на текущем чертеже, то там default под углом

2. как реализовать "zoom" относительно курсора мыши, по принципу как автокад делает
Название: Re: GsPreviewCtrl и значек координат или viewcude
Отправлено: Александр Ривилис от 06-02-2022, 21:33:03
2. как реализовать "zoom" относительно курсора мыши, по принципу как автокад делает
Посмотри как в этом примере делается Zoom Window и сделай по аналогии.