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

15/03/2019

Как управлять статусом показа диалогового окна размера текста OLE

При вставке OLE объекта в чертеж AutoCAD может появляться или не появляться диалоговое окно установки размера текста OLE:

 

Управляется статус показа этого окна в команде НАСТРОЙКА (_OPTIONS):

 

А как можно управлять этим статусом из программы на ObjectARX? Это можно делать двумя способами – используя COM/ActiveX модель AutoCAD используя свойство Application.Preferences.System.DisplayOLEScale  Но это несколько громоздко в случае если arx-приложение вообще не использует COM. Есть и второй способ использующий функцию acedSetEnv:

Код - C++: [Выделить]
  1. //-----------------------------------------------------------------------------
  2. //----- acrxEntryPoint.cpp
  3. //-----------------------------------------------------------------------------
  4. #include "StdAfx.h"
  5. #include "resource.h"
  6.  
  7. //-----------------------------------------------------------------------------
  8. #define szRDS _RXST("")
  9.  
  10. //-----------------------------------------------------------------------------
  11. //----- ObjectARX EntryPoint
  12. class CShowOleScaleDialogApp : public AcRxArxApp {
  13.  
  14. public:
  15.   CShowOleScaleDialogApp() : AcRxArxApp() {}
  16.   virtual AcRx::AppRetCode On_kInitAppMsg(void *pkt) {
  17.     AcRx::AppRetCode retCode = AcRxArxApp::On_kInitAppMsg(pkt);
  18.     return (retCode);
  19.   }
  20.  
  21.   virtual AcRx::AppRetCode On_kUnloadAppMsg(void *pkt) {
  22.     AcRx::AppRetCode retCode = AcRxArxApp::On_kUnloadAppMsg(pkt);
  23.     return (retCode);
  24.   }
  25.  
  26.   virtual void RegisterServerComponents() {  }
  27.   // Включаем показ диалогового окна размера текста OLE
  28.   // Enable ShowOleScaleDialog
  29.   static void RivilisShowOleScaleDialog() {
  30.     acedSetEnv(ACRX_T("ShowOleScaleDialog"), ACRX_T("1"));
  31.   }
  32.   // Выключаем показ диалогового окна размера текста OLE
  33.   // Disable ShowOleScaleDialog
  34.   static void RivilisHideOleScaleDialog() {
  35.     acedSetEnv(ACRX_T("ShowOleScaleDialog"), ACRX_T("0"));
  36.   }
  37.   // Показываем статус показа диалогового окна размера текста OLE
  38.   // Show status of ShowOleScaleDialog
  39.   static void RivilisGetShowOleScaleDialogStatus() {
  40.     ACHAR status[2] = ACRX_T("1");
  41.     acedGetEnv(ACRX_T("ShowOleScaleDialog"),status,2);
  42.     acutPrintf(
  43.       ACRX_T("\nShowOleScaleDialog = %s"),
  44.       AcString(status).compare(ACRX_T("1")) == 0?
  45.         ACRX_T("Да") : ACRX_T("Нет")
  46.     );
  47.   }
  48. };
  49.  
  50. //-----------------------------------------------------------------------------
  51. IMPLEMENT_ARX_ENTRYPOINT(CShowOleScaleDialogApp)
  52.  
  53. ACED_ARXCOMMAND_ENTRY_AUTO(CShowOleScaleDialogApp, Rivilis, ShowOleScaleDialog, ShowOleScaleDialog, ACRX_CMD_MODAL, NULL)
  54. ACED_ARXCOMMAND_ENTRY_AUTO(CShowOleScaleDialogApp, Rivilis, HideOleScaleDialog, HideOleScaleDialog, ACRX_CMD_MODAL, NULL)
  55. ACED_ARXCOMMAND_ENTRY_AUTO(CShowOleScaleDialogApp, Rivilis, GetShowOleScaleDialogStatus, GetShowOleScaleDialogStatus, ACRX_CMD_MODAL, NULL)

 

Видео:

Автор: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=9154.0

Опубликовано 15.03.2019
Отредактировано 15.03.2019 в 23:21:30