Red de conocimiento informático - Material del sitio web - Cómo implementar el evento de doble clic del mouse en AutoCAD

Cómo implementar el evento de doble clic del mouse en AutoCAD

(I) Implementación en AutoCAD2000i

En AutoCAD2000i, basado en la nueva clase ARX AcDbDoubleClickEdit, hay una nueva API ObjectARX

que se utiliza específicamente para manejar eventos de doble clic en entidades. En AutoCAD2000i, el comportamiento predeterminado es llamar al Editor de definición de entidad o al Administrador de propiedades de objeto apropiado. Si se seleccionan varias entidades al mismo tiempo, al hacer doble clic en una entidad en el conjunto de selección aparecerá el Administrador de propiedades de objetos. Para entidades personalizadas, es posible anular el evento de doble clic y cambiar el comportamiento predeterminado, para lo cual es necesario derivar una clase de AcDbDoubleClickEdit para cada entidad que maneja el evento de doble clic. Vea el siguiente ejemplo de trabajo con una polilínea (se omitió parte del código para ahorrar espacio):

#include "AcDblClkEdit.h"

class AcDbDoubleClickEditPline : public AcDbDoubleClickEdit

{

público:

...

void startEdit(AcDbEntity *pEnt,AcGePoint3d pt);

void FinishEdit(void); p>

};

Para recibir mensajes de anuncio, es necesario declarar dos métodos en esta clase: startEdit() y FinishEdit().

Cuando se carga la aplicación, la clase AcDbDoubleClickEdit debe agregar extensiones de protocolo para los objetos de la base de datos que se procesarán; por ejemplo, agregue el siguiente código durante la inicialización de InitApplication():

pPlineEdit = new AcDbDoubleClickEditPline;

AcDbPline::desc()->addX(AcDbDoubleClickEdit::desc(),pPlineEdit);

Del mismo modo, pasos para eliminar protocolos de los objetos de la base de datos al desinstalar la aplicación extensión Como sigue:

AcDbPline::desc()->delX(AcDbDoubleClickEdit::desc());

Para compilar el programa, también debe conectar la biblioteca AcDblClkEditPE.lib e InitApplication(), el código es el siguiente:

acrxDynamicLinker->loadModule(/*MSG0*/"ACDBLCLKEDITPE.ARX",Adesk::kFalse);

(ii) AutoCAD2000 y 2002

En AutoCAD2000 y 2002, si no existe la clase AcDbDoubleClickEdit, ¿cómo responder al doble clic?

Los amigos que conocen ObjectARX deben saber que Autodesk proporciona a los desarrolladores un mecanismo de reactor similar al procesamiento de mensajes MFC. Usando este mecanismo, podemos agregar/editar/eliminar eventos de entrada, entidades y responder a otros eventos. Los mecanismos de reacción comunes de AutoCAD incluyen el reactor de editor (AcEditorReactor), el reactor de entidad (AcDbEntityReactor), el reactor de objetos (AcDbObjectReactor), el reactor de base de datos de gráficos (AcDbDatabaseReactor) y el reactor de gestión de documentos (AcApDocManagerReactor). AcApDocManagerReactor), etc.

Aquí utilizamos el reactor del editor para implementar la respuesta al evento de doble clic del mouse. Los siguientes son los pasos de implementación.

Paso 1 Usaremos la herramienta asistente para derivar una nueva clase de reactor de editor: TTCDblClkTestReactor. Y sobrecargue el siguiente método del reactor del editor:

virtual void BeginDoubleClick( const AcGePoint3d& clickPoint);

El paso 2 declara un objeto TTCDblClkTestReactor global de la siguiente manera:

static TTCDblClkTestReactor *gpDblClkTest;

Paso 3 Cree el objeto reactor durante la inicialización de la aplicación.

//Inicializa esta aplicación. Registre sus

// comandos, reactores...

void InitApplication()

{

// NOTA: Por favor, no edite las siguientes líneas.

//{{AFX_ARX_INIT

AddCommand("TT", "TEST"."TEST", ACRX_CMD_TRANSPARENT |

ACRX_CMD_USEPICKSET, TTtest);

//}}}AFX_ARX_INIT

// TODO: Agregar función de inicialización

gpDblClkTest = new TTCDblClkTestReactor() // Crear objeto de reactor editor

}

Paso 4 Cuando se descarga la aplicación, borre el objeto del reactor de la memoria.

// Desinstala esta aplicación. Descargar todos los objetos registrados en InitApplication

//