Как запустить диалоговое окно калькулятора в 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. Смотрите пример использования:
- using Autodesk.AutoCAD.Runtime;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.EditorInput;
- // Это из файла AcCalcUi.dll - не забываем про CopyLocal = False
- using Autodesk.AutoCAD.CalculatorUI;
- using Autodesk.AutoCAD.Internal.Calculator;
- [assembly: CommandClass(typeof(Rivilis.CalcFormTest))]
- namespace Rivilis
- {
- public class CalcFormTest
- {
- [CommandMethod("CalcTest")]
- public void CalcTestHandler()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Editor ed = doc.Editor;
- // Запускаем модальную форму с калькулятором,
- // Результат вычислений помещается в структуру CalcResult
- CalcResult rs = QCalcApplication.ShowModalCalculator("Тест калькулятора", "1*2*3*4*5*6*7*8*9*10", true);
- if (rs != null) {
- ed.WriteMessage($"\nDWGResultString = {rs.DWGResultString}, " +
- $"\nResultString = {rs.ResultString}," +
- $"\nResult = {rs.Result} Result.Type = {rs.Type}"
- );
- }
- }
- }
- }
Результат:
Опубликовано 28.10.2020