Un saluto a tutti, ogni tanto ho bisogno di voi.
Cercherò di essere il più chiaro e sintetico possibile, e per far questo non posterò il codice "vero" ma una sua schematizzazione.
Io ho tre array chiamati con lo stesso nome 'faces' che rappresentano le 6 facce di un solido. Gli array sono tre perchè i tipi di elementi che contengono possono essere 3: il primo tipo (struttura) è FaceT e costruisce facce "piatte" ricoperte da una texture, il secondo è FaceH e costruisce facce "accidentate" modellate da una HeightMap ed il terzo FaceHT fa le due cose insieme.
Per stabilire se un osservatore sta "sorvolando" una delle facce di un solido e se si quale numero di faccia serve un metodo Close() che accetta in argomento l'array faces e restituisce il numero di faccia sorvolata
Close(faces)
Questo metodo a sua volta ne richiama un altro che richiede pure lui l'array faces:
Close(faces) --> IsP(faces)
IsP verifica se la "proiezione" dell'osservatore sul piano (infinito) della faccia è interna al perimetro del rettangolo che delimita la faccia.
Ora, devo dichiarare il tipo di array quando dichiaro Close e IsP:
public int Close(FaceT faces) --> public bool IsP(FaceT faces)
Ma io ho tre tipi di "facce" e dunque mi servono 6 metodi (tre coppie)
public int CloseT(FaceT faces) --> public bool IsPT(FaceT faces)
public int CloseH(FaceH faces) --> public bool IsPH(FaceH faces)
public int CloseHT(FaceHT faces) --> public bool IsPHT(FaceHT faces)
Per carità, funzionare funziona, ma per principio (e per correttezza di programmazione) ho cercato di utilizzare solo 2 metodi, in questo modo:
public int Close<T>(T faces) --> public bool IsP<T>(T faces)
E ci sono pure quasi riuscito, tranne per una cosa: questo errore
Errore 1 Impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'T'
L'errore nasce dal fatto che 'faces' è un array e all'interno del secondo metodo si cerca di leggerne gli
elementi faces[i].
codice:
public bool IsOn<T>(int i, T faces, Vector3 L, float closed)
{
bool res = false;
Vector3 NP = My.Discovery.Position - L - faces[i].nodes[0];
Vector3 v1 = Vector3.Normalize(faces[i].V1);
Vector3 v2 = Vector3.Normalize(faces[i].V2);
if ((Vector3.Dot(NP, faces[i].Normal) > My.Q2) & (Vector3.Dot(NP, faces[i].Normal) < closed))
if ((Vector3.Dot(NP, v1) > 0) & (Vector3.Dot(NP, v1) < faces[i].V1.Length()))
if ((Vector3.Dot(NP, v2) > 0) & (Vector3.Dot(NP, v2) < faces[i].V2.Length()))
res = true;
return res;
}
Come posso risolvere?
Ciao e grazie.