10/12/2015
Как запустить редактор мультитекста?
Вопрос:
Как в ObjectARX и AutoCAD .NET API запустить встроенный редактор мультитекста?
Ответ:
Начиная с версии AutoCAD 2011 для редактирования мультитекста в ObjectARX имеется класс AcEdInplaceTextEditor и класс InplaceTextEditor в AutoCAD .NET API. Ниже примеры использования:
Код - C++: [Выделить]
- #include "StdAfx.h"
- #include <AcEdInplaceTextEditor.h>
- #include "resource.h"
- //-----------------------------------------------------------------------------
- #define szRDS _RXST("")
- //-----------------------------------------------------------------------------
- //----- ObjectARX EntryPoint
- class CMTextEditorApp : public AcRxArxApp {
- public:
- CMTextEditorApp () : AcRxArxApp () {}
- virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
- AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;
- return (retCode) ;
- }
- virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
- AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
- return (retCode) ;
- }
- virtual void RegisterServerComponents () {
- }
- static void RivilisMTEditor () {
- ads_point pt;
- ads_name en;
- if (acedEntSel(_T("\nВыберите мультитекст: "), en, pt) == RTNORM)
- {
- AcDbObjectId eId; acdbGetObjectId(eId, en);
- AcDbObjectPointer<AcDbMText> pMtext(eId, AcDb::kForWrite);
- Acad::ErrorStatus es = pMtext.openStatus();
- if (es == Acad::eNotThatKindOfClass) {
- acedPrompt(_T("\nЭто не мультитекст!"));
- return;
- } else if (es != Acad::eOk) {
- acutPrintf(_T("\nОшибка: %s"), acadErrorStatusText(es));
- return;
- }
- // Объект редактора MTEXT:
- AcEdInplaceTextEditor *pTextEditor = AcEdInplaceTextEditor::current();
- // Установки редактора:
- AcEdInplaceTextEditorSettings *pTextEditorSettings = new AcEdInplaceTextEditorSettings();
- // Запускаем редактирование
- if (pTextEditor->invoke(pMtext, pTextEditorSettings) != Acad::eOk) {
- pMtext->cancel();
- }
- delete pTextEditorSettings;
- }
- }
- } ;
- //-----------------------------------------------------------------------------
- IMPLEMENT_ARX_ENTRYPOINT(CMTextEditorApp)
- ACED_ARXCOMMAND_ENTRY_AUTO(CMTextEditorApp, Rivilis, MTEditor, MTEditor, ACRX_CMD_MODAL, NULL)
Код - C#: [Выделить]
- using Autodesk.AutoCAD.Runtime;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.EditorInput;
- [assembly: CommandClass(typeof(MTextEditor.Test))]
- namespace MTextEditor
- {
- public class Test
- {
- [CommandMethod("MTEditor")]
- public void MTEditor()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null) return;
- Editor ed = doc.Editor;
- PromptEntityOptions pr = new PromptEntityOptions("\nВыберите мультитекст");
- pr.SetRejectMessage("Это не мультитекст!");
- pr.AddAllowedClass(typeof(MText), false);
- PromptEntityResult rs = ed.GetEntity(pr);
- if (rs.Status != PromptStatus.OK) return;
- using (MText mt = rs.ObjectId.Open(OpenMode.ForWrite) as MText)
- {
- InplaceTextEditor.Invoke(mt, new InplaceTextEditorSettings());
- }
- }
- }
- }
Автор: Александр Ривилис
Отредактировано 10.12.2015 в 01:45:58
Обсуждение: http://adn-cis.org/forum/index.php?topic=3270
Опубликовано 10.12.2015Отредактировано 10.12.2015 в 01:45:58