Estrategia para implementar un editor de curvas complejo con XAML / WPF

Quiero implementar un CurveEditor bastante complejo que tenga que soportar los requisitos habituales como:

eje libremente escalable y móvil diferentes tipos de interpolación por punto de curva (lineal, cúbico, spline)Tangents (unidos y rotos)Seleccionando uno o varios puntos para editar (mover, escalar, eliminar) mediante Fence o Click Solo muestre los identificadores y los resaltados para los puntos de curva seleccionados

No quiero manipular curvas WPF reales sino un modelo existente con conjuntos clave / valor / tangentes y muestrear la forma precisa de la curva desde nuestra implementación.

Ya obtuve algo de experiencia en la implementación de plantillas y controles de usuario personalizados. Pero quiero asegurarme de que no pierdo ninguna solución aparente. Planeaba tener este árbol XAML general:

CurveEditor - Ventana que contiene todo el contenido MainThumb: Habilite arrastrar y escalar el rango del editor XAxis: UserControl desgarrando algo de escala en el lado izquierdo YAxis: UserControl desgarrando alguna escala en la parte inferiorCurva: Lienzo que sujeta las curvasCurv: UserControl para una sola curva CurveName - Etiqueta de la curva CurveLine - DrawingVisual que representará la curva real al muestrear la implementación interna de la función spline. CurveEditPoints - Lienzo que contiene todos los puntos de edición CurveEditPoint - UserControl para un solo punto de edición LeftTangent - UserControl para el identificador tangente izquierdo LeftTangentThumb - Para modificar el manejador RightTangent - UserControl para el identificador tangente correcto RightTangentThumb - Para modificar el manejador CurvePointCenter - Visualización del punto real, seleccione el estado y el tipo de interpolación. CurvePointThumb - Pulgar para seleccionar y arrastrar el punto alrededor de

Lo sé, esta es una pregunta bastante compleja y no estoy pidiendo una implementación real. Estoy interesado en las siguientes preguntas:

¿Puede recomendar algún tutorial o libro que pueda ayudarme? (Ya obtuve Illustrated WPF, WPF Control Development Unleashed y un par de otros)Deberían elementos menores como las Tangentes ser Controles de Usuario individuales?Qué contenedor es el más adecuado para alojar las "Curvas", "EditPoints" y "Tangentes" individuales. En este momento, uso Canvas y Canvas.SetLeft / SetTop para colocar a los niños, pero eso se siente "extraño". ¿Debo usar "Formas" como Path o DrawingVisual-Classes para implementar la representación real. Path es sencillo, pero me preocupa el rendimiento con cientos de CurvePoints.Debo usar transformaciones para rotar las tangentes o está bien hacer algunos cálculos de triangulación en el código detrás de los archivos?Tiene sentido la estructura, o sugiere un enfoque completamente diferent

Respuestas a la pregunta(1)

Su respuesta a la pregunta