Strategy para implementar um editor de curvas complexo com XAML / WPF

Eu quero implementar um CurveEditor bastante complexo que tenha de suportar os requisitos usuais, como:

eixo facilmente escalável e móvelipos de interpolação diferentes por ponto de curva (linear, cúbico, splin Tangentes (unidos e quebrados) Selecionando um ou vários pontos para editar (mover, dimensionar, excluir) via Fence ou ClickExibir apenas alças e destaques para pontos de curva selecionados

Não quero manipular curvas WPF reais, mas um modelo existente com conjuntos de chaves / valores / tangentes e provar a forma precisa da curva em nossa implementaçã

Eu já adquiri alguma experiência na implementação de UserControls e Templates personalizados. Mas quero ter certeza de que não perco nenhuma solução aparente. Eu planejava ter essa árvore XAML geral:

CurveEditor - Janela contendo todo o conteúdo MainThumb: Habilite arrastar e dimensionar o intervalo do editor XAxis: UserControl rendendo alguma escala no lado esquerdo YAxis: UserControl rendendo uma escala na parte inferior Curvas: Tela segurando as curvasCurv: UserControl para uma única curva CurveName - Rótulo da curva CurveLine - DrawingVisual que renderizará a curva real amostrando a implementação interna da função splin CurveEditPoints - Tela que contém todos os pontos de edição CurveEditPoint - UserControl para um único ponto de edição LeftTangent - UserControl para o identificador tangente esquerdo LeftTangentThumb - Para modificar a alça RightTangent - UserControl para o identificador tangente certo RightTangentThumb - Para modificar a alça CurvePointCenter - Visualização do ponto real, selecione estado e tipo de interpolaçã CurvePointThumb - Thumb para selecionar e arrastar o ponto ao redor

Eu sei, essa é uma pergunta bastante complexa e não estou pedindo uma implementação real. Estou interessado nas seguintes perguntas:

Você pode recomendar tutoriais ou livros que possam me ajudar (eu já recebi o Illustrated WPF, o WPF Control Development Unleashed e alguns outros)s elementos menores, como os Tangents, devem ser UserControls individuai contêiner @What é mais adequado para hospedar as "Curvas", "EditPoints" e "Tangentes" individuais. No momento, uso o Canvas e o Canvas.SetLeft / SetTop para posicionar os filhos, mas isso parece "estranho".Devo usar "Formas" como Path ou DrawingVisual-Classes para implementar a representação real. O caminho é simples, mas estou preocupado com o desempenho com centenas de pontos de curva.Devo usar transformações para girar as tangentes ou é bom fazer algumas contas de triangulação no código por trás dos arquivoA estrutura faz sentido aproximadamente ou você sugere uma abordagem completamente diferente?

questionAnswers(1)

yourAnswerToTheQuestion