/// <summary> /// Manejador de eventos para el evento <c>DigiNG.AddingEntity</c> /// </summary> /// <remarks> /// En caso de que la entidad a almacenar sea una lína, comprueba esta tiene entre sus códigos alguno de entre los enumerados por el usuario en la línea de /// comandos. Si es así, comprueba el área y si esta es inferior al mínimo indicado por el usuario en la línea de comandos, cancela su escritura. /// </remarks> /// <param name="sender"></param> /// <param name="e"></param> void DigiNG_AddingEntity(object sender, AddingEntityEventArgs e) { if (!SustituirOEliminarEntidadesPorArea.Sustituir) return; if (!(e.Entity is ReadOnlyLine)) return; ReadOnlyLine línea = e.Entity as ReadOnlyLine; if (!línea.Closed) return; foreach (var nombreCódigo in códigos.Keys) { if (línea.TieneElCódigo(nombreCódigo)) { var area = System.Math.Abs(DigiNG.GeographicCalculator.CalculateArea(línea)); if (area < códigos[nombreCódigo]) { Digi3D.ShowBallon( "Entidad descartada", string.Format("Se descartó la línea con código {0} porque su área {1} es inferior a {2}", nombreCódigo, area, códigos[nombreCódigo]), 2); DigiNG.DrawEntity(e.Entity, DrawingMode.Hide); e.Cancel = true; return; } } } }
/// <summary> /// Manejador de eventos para el evento <c>DigiNG.AddingEntity</c> /// </summary> /// <remarks> /// En caso de que la entidad a almacenar sea una lína, comprueba esta tiene entre sus códigos alguno de entre los enumerados por el usuario en la línea de /// comandos. Si es así, comprueba el área y si esta es inferior al mínimo indicado por el usuario en la línea de comandos, cancela su escritura y ejecuta la /// orden PUNTO_R para que el usuario introduzca un segundo punto con la rotación del puntual. /// </remarks> /// <param name="sender"></param> /// <param name="e"></param> void DigiNG_AddingEntity(object sender, AddingEntityEventArgs e) { if (!SustituirOEliminarEntidadesPorArea.Sustituir) return; if (!(e.Entity is ReadOnlyLine)) return; ReadOnlyLine línea = e.Entity as ReadOnlyLine; if (!línea.Closed) return; foreach (var nombreCódigo in códigos.Keys) { if (línea.TieneElCódigo(nombreCódigo)) { var area = Math.Abs(DigiNG.GeographicCalculator.CalculateArea(línea)); if (area < códigos[nombreCódigo].Area) { Digi3D.ShowBallon( "Sustitución de área por puntual", string.Format("Se va a sustituir su área con código {0} por un puntual con código {1} porque su área {2} es inferior a {3}", nombreCódigo, códigos[nombreCódigo].CódigoPunto, area, códigos[nombreCódigo].Area), 2); DigiNG.DrawEntity(e.Entity, DrawingMode.Hide); e.Cancel = true; // En vez de ejecutar la orden PUNTO_R, ejecutamos su GUID, de modo que esta extensión sea compatible independientemente del idioma seleccionado por el usuario para Digi3D. DigiNG.Commands.Push("{D768CDA8-0BFA-465f-BC53-92F8C3D52786}=" + códigos[nombreCódigo].CódigoPunto, false); // Por último, generamos un evento de pulsación de pedal/botón de dato con las coordenadas del centro de la entidad que no se va a almacenar, para así hacer que la orden PUNTO_R // únicamente le solicite al usuario el segundo punto (el que indica la rotación del punto). DigiNG.Commands.Top.OnDataDown(e.Entity.Center); return; } } } }