Вызов команды по нажатию на ручку customentity

Автор Тема: Вызов команды по нажатию на ручку customentity  (Прочитано 14423 раз)

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Здравствуйте. Как правильнее реализовать вызов команды или функции, срабатывающей при нажатии на ручку пользовательского примитива, в которой пользователь в дальнейшем будет вводить данные или указывать точки на чертеже. Примитив находиться в dbx а команды в arx. Я попытался в функции setHotGripFunc вызвать AcedCommandS но она не сработала. Александр Ривилис предложил использовать  acDocManager->sendStringToExecute или acedPostCommand. Но как я понял через эти функции можно передать только текстовые данные. А если нужно передать другие данные, например: имя примитива или точку?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Vitaut Tryputsin
Приветствую на форуме!
Но как я понял через эти функции можно передать только текстовые данные. А если нужно передать другие данные, например: имя примитива или точку?
Имя примитива можно передать через (handent "метка примитива"), точку тоже можно передать в формате "x,y,z"
Вопрос в другом - нужно ли это? Может быть команда не нужна вообще? Это стандартная команда AutoCAD или команда написанная тобой? Объясни задачу целиком - вполне возможно найдётся другое решение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
К примеру есть воздуховод. Пользователь нажимает на ручку. И запускается команда черчения воздуховодов, черчение начинается от конца воздуховода, на котором размещена ручка. В процессе черчения пользователь может менять размер и указывать точки через которые будут проходить воздуховоды и т.д.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
И запускается команда черчения воздуховодов
Команда черчения воздуховода твоя?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Пользователь нажимает на ручку. И запускается команда черчения воздуховодов
Обычно в этой ситуации в AutoCAD принято начинать редактировать выбранный "воздуховод", а не запускать команду черчения другого "воздуховода". Это я на всякий случай уточняю.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
да и воздуховод и команда моя. Ручка нужна чтобы вручную не нажимать на команду черчения на панели и не вводить его размер. И начальную точку. Если к примеру бедет требоваться продолжить черчение от конца существующего.

Отмечено как Решение Vt 23-12-2015, 19:34:04

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я напишу как я бы сделал в этой ситуации, а тебе уже решать идти таким путём или нет. Команду оформляешь в arx-файле. Ты её (без параметров) запускаешь из dbx-файла при выборе ручки. Но! До запуска команды ты готовишь в setHotGripFunc все необходимые для команды параметры (имя примитива, точки, и т.д.)
В dbx-файле ты делаешь экспортируемую функцию, которая будет вызваться из arx-файла и получать все необходимые тебе параметры. Например, это может быть статическая функция в классе воздуховода с именем (тоже, например) GetParamsForDraw(). В этом случае команде не нужно напрямую передавать никакие параметры. После запуска она просто вызовет эту статическую функцию и получит всё что нужно.
Как тебе такой вариант?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Спасибо, Александр. Мне такое решение нравится. Многое при изучении objectarx, я почерпнул из ваших коментариев и статей на форумах.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Пожалуйста! :) Кстати, обрати внимание на кнопки + и - и кнопку Решение.
Если будут проблемы - пиши. Поможем.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Спасибо. С решением разобрался а +/- не нашел

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
А все под кармой. Почему-то сразу не заметил

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Vitaut Tryputsin
Будем считать, что прописку на форуме получил!  :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Попробовал по предложенному способу сделать. Функция GetParamsForDraw() возвращает нулевые значения, когда вызывается в команде черчения. Возможно я не совсем верно понял, что значит экспортируемая функция. Если да, то как предложенную функцию сделать экспортируемой?

Код - C++ [Выбрать]
  1. namespace GripCback
  2. {
  3.                
  4.         static int gripNumber;
  5.                        
  6.         static AcDbObjectId entId;
  7.  
  8.         static void GetParamsForDraw(AcDbObjectId &pEntId, int &pGripNumber)
  9.         {
  10.  
  11.                         pEntId=entId;
  12.                         pGripNumber=gripNumber;
  13.                
  14.                
  15.         };
« Последнее редактирование: 24-12-2015, 14:13:29 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
1. Обрати внимание у меня в подписи как следует форматировать код на форуме.
2. Я не увидел где у тебя происходит установка gripNumber и entId.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение