внутри редактора блоков?

Автор Тема: внутри редактора блоков?  (Прочитано 8907 раз)

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

Оффлайн Николай ГорловАвтор темы

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
внутри редактора блоков?
« : 12-02-2015, 12:20:12 »
Добрый день, когда-то интересовал вопрос, как узнать из arx команды, открыт ли в данный момент редактор блоков или мы просто находимся в пространстве модели/листа (тогда отделался легким испугом без выяснений того, где мы находимся). Про модель/лист понятно, и вопросов никаких не вызывает. А что насчет именно окошка редактирования внутренностей блока? В какую сторону копать. Про флаг ACRX_CMD_NOBEDIT знаю. Интересует именно программно выяснить, где мы находимся, т.к. чуйка у меня :), нужно будет писать команду именно работающую в модели и в окне редактора блоков, и следовательно, начать нужно с выяснения, где именно мы находимся.

Отмечено как Решение Николай Горлов 16-02-2015, 11:54:50

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: внутри редактора блоков?
« Ответ #1 : 12-02-2015, 13:28:54 »
Думаю что это то, что ты ищешь:
Системная переменная BLOCKEDITOR
Ну и еще на всякий случай:
Системная переменная REFEDITNAME
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай ГорловАвтор темы

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: внутри редактора блоков?
« Ответ #2 : 16-02-2015, 11:55:34 »
спс. BLOCKEDITOR - то что нужно.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: внутри редактора блоков?
« Ответ #3 : 25-06-2015, 20:43:53 »
Второй вариант для выяснения находимся ли мы в редакторе блоков и если мы в редакторе блоков, то узнаём имя блока. Код работает начиная с AutoCAD 2009 и использует недокументированные функции:
Код - C++ [Выбрать]
  1. //--------------------------------------------------------------
  2. //  Эти функции экспортируются из acad.exe (или accore.dll
  3. //  начиная с AutoCAD 2013) и требуют соотвественно для линковки
  4. //  acad.lib (или accore.lib для версий начиная с 2013)
  5. //--------------------------------------------------------------
  6. class AcString __cdecl acedGetBlockEditBlockName(void);
  7. bool __cdecl acedIsDocumentInBlockEditor(class AcApDocument *);
  8.  
  9. static void TestBEdit () {
  10.   if (acedIsDocumentInBlockEditor(curDoc()))
  11.   {
  12.     acutPrintf(_T("\nМы в редакторе блока %s"),
  13.         acedGetBlockEditBlockName().constPtr());
  14.   } else {
  15.     acutPrintf(_T("\nМы в не в редакторе блоков"));
  16.   }
  17. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Леонид Семенов

  • ADN Club
  • Сообщений: 44
  • Карма: 2
  • Леонид Семенов. Ведущий инженер-программист
Re: внутри редактора блоков?
« Ответ #4 : 16-11-2016, 13:02:49 »
Второй вариант для выяснения находимся ли мы в редакторе блоков и если мы в редакторе блоков, то узнаём имя блока. Код работает начиная с AutoCAD 2009 и использует недокументированные функции:
Код - C++ [Выбрать]
  1. //--------------------------------------------------------------
  2. //  Эти функции экспортируются из acad.exe (или accore.dll
  3. //  начиная с AutoCAD 2013) и требуют соотвественно для линковки
  4. //  acad.lib (или accore.lib для версий начиная с 2013)
  5. //--------------------------------------------------------------
  6. class AcString __cdecl acedGetBlockEditBlockName(void);
  7. bool __cdecl acedIsDocumentInBlockEditor(class AcApDocument *);
  8.  
  9. static void TestBEdit () {
  10.   if (acedIsDocumentInBlockEditor(curDoc()))
  11.   {
  12.     acutPrintf(_T("\nМы в редакторе блока %s"),
  13.         acedGetBlockEditBlockName().constPtr());
  14.   } else {
  15.     acutPrintf(_T("\nМы в не в редакторе блоков"));
  16.   }
  17. }


А можно этот код на C# реализовать?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: внутри редактора блоков?
« Ответ #5 : 16-11-2016, 13:08:31 »
Да. И это было уже сделано: http://adn-cis.org/forum/index.php?topic=2619.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Леонид Семенов

  • ADN Club
  • Сообщений: 44
  • Карма: 2
  • Леонид Семенов. Ведущий инженер-программист
Re: внутри редактора блоков?
« Ответ #6 : 16-11-2016, 13:12:08 »
Спасибо