24/02/2016
Как показать диалоговое окно редактирования поля (Field) средствами .NET
Вы можете показать диалоговое окно AutoCAD редактирования поля, используя функцию “AcFdUiInvokeFieldDialog” из ObjectARX при помощи P/Invoke. При помощи этой функции можно показать диалог и вернуть объект поля, выбранный пользователем, переданный как первый параметр. Код ниже показывает как это сделать:
Код - C#: [Выделить]
- using System;
- using System.Runtime.InteropServices;
- using Autodesk.AutoCAD.Runtime;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.Geometry;
- using Autodesk.AutoCAD.EditorInput;
- [assembly: CommandClass(typeof(FieldDialog.Utils))]
- namespace FieldDialog
- {
- public class Utils
- {
- [DllImport("AcFdUi.arx", CallingConvention = CallingConvention.StdCall, EntryPoint = "AcFdUiInvokeFieldDialog")]
- private static extern Int32 InvokeFieldDialog(ref IntPtr fd, Int32 bEdit, IntPtr pDb, IntPtr pParent);
- [CommandMethod("InsField", CommandFlags.Modal)]
- public void InsField()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null) return;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- PromptPointResult ppr =
- ed.GetPoint("\nУкажите точку вставки мультитекста: ");
- if (ppr.Status != PromptStatus.OK) return;
- using (Field fd = new Field())
- {
- IntPtr ptr = fd.UnmanagedObject;
- InvokeFieldDialog(ref ptr, 1, db.UnmanagedObject, IntPtr.Zero);
- using (BlockTableRecord curSpace =
- db.CurrentSpaceId.Open(OpenMode.ForWrite) as BlockTableRecord)
- {
- using (MText mt = new MText())
- {
- mt.Location = ppr.Value;
- curSpace.AppendEntity(mt);
- mt.SetField("TEXT", fd);
- fd.Evaluate((int)FieldEvaluationContext.Demand, db);
- }
- }
- }
- }
- }
- }
Автор: Александр Ривилис
Отредактировано 26.02.2016 в 14:12:05
Обсуждение: http://adn-cis.org/forum/index.php?topic=4288
Опубликовано 24.02.2016Отредактировано 26.02.2016 в 14:12:05