Architettura - Libreria di modellazione 3D

-2

Sto scrivendo una libreria per consentire agli utenti di generare modelli 3D in modo programmatico.

  • Codice di scrittura utente (ad esempio Square(4) )
  • Anteprima visualizzazioni utente del modello 3D (con visualizzatore incorporato)
  • L'utente può "stampare" il modello su un file .obj che può essere letto da altri programmi di modellazione 3D e visualizzatori

Qual è un buon modo per progettare gli oggetti dati e la funzionalità di cui sopra?

Supponiamo che un oggetto Square sottoclassi una classe Polygon .

Un Polygon avrebbe

  • vertici
  • una faccia
  • una trasformazione / traduzione

Alla fine, devo essere in grado di print questo poligono sullo schermo. Alcune parti del mio programma dovranno sapere come renderlo usando una libreria grafica che userò. Tuttavia non voglio aggiungere questa funzionalità come parte della classe Polygon perché vorrei che la classe Polygon si preoccupasse solo di considerazioni geometriche pure, non dei dettagli delle librerie grafiche. Quindi, potrei semplicemente creare un oggetto Renderer che possa prendere Polygons e Circles e Curves e controllarli e quindi decidere come visualizzarli, ma non sembra molto orientato agli oggetti.

Quindi, per riassumere, voglio avere

  • un gruppo di diversi tipi di oggetti geometrici ( Polygons , Circles , Curves , ecc.)
  • alcuni modi diversi per "stampare" gli oggetti (visualizzare sullo schermo, scrivere su file, ecc.)

E non sono sicuro di dove mettere tutte queste funzionalità in modo che sia ben incapsulato, facile da mantenere ed estensibile.

    
posta bearMountain 03.11.2014 - 08:34
fonte

1 risposta

0

Pattern visitatori

Comicamente, e con buona fortuna, ho trovato l'articolo di Wikipedia di cui sopra che descrive precisamente la mia situazione (quali sono le probabilità?).

Consider the design of a 2D CAD system. At its core there are several types to represent basic geometric shapes like circles, lines and arcs... one could apply the Visitor pattern. The Visitor pattern encodes a logical operation on the whole hierarchy into a single class containing one method per type.

    
risposta data 04.11.2014 - 21:07
fonte