Realización de eventos de respuesta de doble clic en AutoCAD2012
(1) Implementación en AutoCAD2000i
Hay un nuevo ObjectARX en AutoCAD2000i
API se utiliza especialmente para manejar eventos de doble clic de entidades. Esta API es. basado en la nueva clase ARX AcDbDoubleClickEdit. Cuando hace doble clic en una entidad en AutoCAD2000i, el comportamiento predeterminado es llamar al editor de definición de entidad o al administrador de propiedades de objetos correspondiente. Si se seleccionan varias entidades al mismo tiempo, al hacer doble clic en la entidad en el conjunto de selección aparecerá el administrador de propiedades del objeto. Para entidades personalizadas, puede sobrecargar el evento de doble clic y cambiar el comportamiento predeterminado. Para hacer esto, necesita derivar una clase de AcDbDoubleClickEdit para cada entidad que quiera manejar el evento de doble clic. Consulte a continuación un ejemplo de manejo de polilíneas (se ha omitido parte del código para ahorrar espacio):
#include "AcDblClkEdit.h"
class AcDbDoubleClickEditPline: public AcDbDoubleClickEdit p>
{
público:
...
void startEdit(AcDbEntity *pEnt,AcGePoint3d pt);
void FinishEdit (void);
};
Para recibir mensajes de notificación, se deben declarar dos métodos en esta clase: uno es startEdit() y el otro es FinishEdit().
Cuando se carga la aplicación, la clase AcDbDoubleClickEdit necesita agregar extensiones de protocolo a los objetos de la base de datos que se procesarán. Por ejemplo, agregue el siguiente código durante el proceso de inicialización de InitApplication():
<. p>pPlineEdit = new AcDbDoubleClickEditPline;AcDbPline::desc()->addX(AcDbDoubleClickEdit::desc(),pPlineEdit);
Del mismo modo, elimine el objeto de la base de datos al desinstalar el extensión del protocolo de aplicación, el método es el siguiente:
AcDbPline::desc()->delX(AcDbDoubleClickEdit::desc());
Para permitir que el programa se compile, AcDblClkEditPE también debe estar conectado a la biblioteca lib y agregar el siguiente código a InitApplication():
acrxDynamicLinker->loadModule(/*MSG0*/"ACDBLCLKEDITPE.ARX",Adesk::kFalse); p>
(2) Implementación en AutoCAD2000 y 2002
No existe una clase AcDbDoubleClickEdit en AutoCAD2000 y 2002, entonces, ¿cómo responder al doble clic?
Los amigos que conocen ObjectARX deben saber que Autodesk proporciona a los desarrolladores un mecanismo de reactor, que es similar al procesamiento de mensajes de MFC. Con él, podemos responder a eventos de entrada, adición/edición/eliminación de entidades y otros eventos. Los reactores comunes de AutoCAD incluyen: reactor de edición (AcEditorReactor), reactor de entidad (AcDbEntityReactor), reactor de objetos (AcDbObjectReactor), reactor de base de datos de gráficos (AcDbDatabaseReactor), reactor de gestión de documentos (AcApDocManagerReactor), etc.
Aquí utilizamos el reactor de edición para responder a los eventos de doble clic del mouse. Los siguientes son los pasos de implementación.
El primer paso es utilizar la herramienta asistente para derivar una nueva clase de reactor de edición: TTCDblClkTestReactor. Y sobrecargue el siguiente método de edición del reactor:
virtual void BeginDoubleClick(const AcGePoint3d& clickPoint);
El segundo paso declara un objeto TTCDblClkTestReactor global, de la siguiente manera:
static TTCDblClkTestReactor *gpDblClkTest;
El tercer paso es crear el objeto reactor cuando se inicializa la aplicación.
// Inicia esta aplicación. Registra tus
// comandos, reactores...
void InitApplication()
{
// NOTA: NO edite las siguientes líneas.
//{{AFX_ARX_INIT
AddCommand("TT", "TEST", "TEST", ACRX_CMD_TRANSPARENT |
ACRX_CMD_USEPICKSET, TTtest);
//}}AFX_ARX_INIT
// TODO: agrega tus funciones de inicialización
gpDblClkTest = new TTCDblClkTestReactor(); // Crea y edita el objeto reactor
}
El cuarto paso es borrar el objeto reactor de la memoria cuando se desinstala la aplicación.
// Descargar esta aplicación. Anular el registro de todos los objetos
// registrados en InitApplication.
void UnloadApplication()
{ p>
// NOTA: NO edite las siguientes líneas.
//{{AFX_ARX_EXIT
acedRegCmds->removeGroup("TT");
//}}AFX_ARX_EXIT
// TODO: limpia tu aplicación
if(gpDblClkTest)
{
elimina gpDblClkTest ; // Borrar el objeto del reactor de edición
gpDblClkTest = NULL;
}
}
El quinto paso es responder al mouse eventos y escribir código de respuesta.
void TTCDblClkTestReactor::beginDoubleClick(const AcGePoint3d& clickPoint)
{
//Escribe aquí el código de evento del mouse
AfxMessageBox (" ¡Este es un programa de prueba!");
}
¡Bien, echemos un vistazo a tus resultados! ¡Divertirse! J
En realidad, hay otras formas de implementar eventos de doble clic del mouse. Lo que sé aquí es: (1) Usar el sistema Windows o AutoCAD
Mensaje de enlace. función acedGrRead(). Sin embargo, no recomiendo estos dos enfoques porque son más problemáticos de implementar, más difíciles de resolver con control de excepciones y no se ajustan al concepto de programación orientada a objetos.
Por supuesto, está bien usarlo cuando se encuentre en circunstancias especiales.