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

28/10/2020

Как запустить диалоговое окно калькулятора в AutoCAD, используя .NET API?

Вопрос: Можно ли запустить диалоговое окно калькулятора AutoCAD (не путать с палитрой калькулятора, вызываемой командой _QUICKCALC) и получить результаты вычисления?

Ответ: Диалоговое окно калькулятора (как и палитра калькулятора) упрятаны в сборке AcCalcUi.dll. Эта сборка не входит в состав ObjectARX SDK, так что следует сослаться на сборку в составе AutoCAD. Не забывайте указывать в свойствах сборки CopyLocal = False, чтобы не копировать эту сборку к своему приложению. Сборка содержит пространства имён:

Autodesk.AutoCAD.CalculatorUI
Autodesk.AutoCAD.CalculatorUI.CalculatorControl
Autodesk.AutoCAD.CalculatorUI.LayoutParser
Autodesk.AutoCAD.CalculatorUI.VariableParser

В простейшем случае для вызова калькулятора мы можем воспользоваться методом  QCalcApplication.ShowModalCalculator. Смотрите пример  использования:

Код - C#: [Выделить]
  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. // Это из файла AcCalcUi.dll - не забываем про CopyLocal = False
  5. using Autodesk.AutoCAD.CalculatorUI;
  6. using Autodesk.AutoCAD.Internal.Calculator;
  7.  
  8. [assembly: CommandClass(typeof(Rivilis.CalcFormTest))]
  9.  
  10. namespace Rivilis
  11. {
  12.   public class CalcFormTest
  13.   {
  14.     [CommandMethod("CalcTest")]
  15.     public void CalcTestHandler()
  16.     {
  17.       Document doc = Application.DocumentManager.MdiActiveDocument;
  18.       Editor ed = doc.Editor;
  19.       // Запускаем модальную форму с калькулятором,
  20.       // Результат вычислений помещается в структуру CalcResult
  21.       CalcResult rs = QCalcApplication.ShowModalCalculator("Тест калькулятора", "1*2*3*4*5*6*7*8*9*10", true);
  22.       if (rs != null) {
  23.         ed.WriteMessage($"\nDWGResultString = {rs.DWGResultString}, " +
  24.                         $"\nResultString = {rs.ResultString}," +
  25.                         $"\nResult = {rs.Result} Result.Type = {rs.Type}"
  26.         );
  27.       }
  28.     }
  29.   }
  30. }

 

Результат:

Автор: Александр Ривилис
Опубликовано 28.10.2020