GsPreviewCtrl и значек координат или viewcude

Автор Тема: GsPreviewCtrl и значек координат или viewcude  (Прочитано 12357 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
Добрый день,
использую GsPreviewCtrl, всё работает
Вот появился заказ добавить в этот View значек системы координат ну или ViewCube (чтобы ориентироваться проше было).
даже не знаю с чего начать.

видел такую функцию acedCreateViewCube, но я на 2015 Acad.
Подскажите куда копать и возможно ли это сделать впринципе.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
видел такую функцию acedCreateViewCube, но я на 2015 Acad.
А что с ней не так в AutoCAD 2015? Она есть как минимум с AutoCAD 2009 до AutoCAD 2017 включительно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
Виноват,
промахнулся походу буковкой когда по документации 2015 поиск делал.
Но в Visual Studio она у мения undefined, мозет include нужен какой то дополнительный?

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

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

говорят что только 1 может быть

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Но в Visual Studio она у мения undefined, мозет include нужен какой то дополнительный?
#include <AcEdViewCube.h>
И как её использовать?
Не знаю - не пробовал.
нашел такую ссылку
https://forums.autodesk.com/t5/objectarx/acedviewcube/td-p/3549492
говорят что только 1 может быть
Это в редакторе AutoCAD может быть только один, а в твоем AcGsView может быть другой.
Попробуй. В противном случае у тебя только один вариант - использовать транзитную графику для рисования, как предложили  Fenton Webb и Kean Walmsley
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
с функцией всё просто получилось (ViewCube добавился и даже крутится).
Но что касается значка начала координат, то только временной графикой можно решить?

Отмечено как Решение begiz 19-07-2016, 15:21:05

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
с функцией всё просто получилось (ViewCube добавился и даже крутится).
Но что касается значка начала координат, то только временной графикой можно решить?
Как-то по образцу и подобию класса OrbitGadget (из GsPreviewCtrl.h) ты можешь сделать иконку UCS. Готового инструмента нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
похоже рано я порадовался.
ViewCube создался, отображается и даже крутится когда орбит(CsPreviewCtrl) делаешь.
Но никак не реагирует на мышь.
Пробовал вызывать родные onLButtonDown, onLButtonUp, onMouseMove не помогло...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Но никак не реагирует на мышь.
Реагирует. Но нужно пересчитать координаты:

« Последнее редактирование: 20-07-2016, 02:06:09 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще с тестовым dwg-файлом:

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
Цитировать
Реагирует. Но нужно пересчитать координаты:
А какие координаты нужны?
Пробовал 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;
« Последнее редактирование: 20-07-2016, 11:28:52 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: GsPreviewCtrl и значек координат или viewcude
« Ответ #10 : 20-07-2016, 11:32:21 »
Я выложу полный проект, а ты в нём покопайся. Там тоже не доведено всё до конца, но как видишь на видео, куб работает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн begizАвтор темы

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
Re: GsPreviewCtrl и значек координат или viewcude
« Ответ #11 : 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" относительно курсора мыши, по принципу как автокад делает

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: GsPreviewCtrl и значек координат или viewcude
« Ответ #12 : 06-02-2022, 21:33:03 »
2. как реализовать "zoom" относительно курсора мыши, по принципу как автокад делает
Посмотри как в этом примере делается Zoom Window и сделай по аналогии.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение