Dunque, la forma più giusta sarebbe
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;
}
perchè faces è un array di 6 elementi in cui ogni elemento è - a seconda del tipo - una faccia FaceT, FaceH o FaceHT. Quindi faces può contenere 6 elementi FaceT oppure 6 elementi FaceH oppure 6 elementi FaceHT.
Ad esempio
public struct FaceT
{
public Vector3[] nodes; //nodi
public Vector3 V1;//vettori laterali (dimensionali)
public Vector3 V2;
public Vector3 Normal;//normale al piano zero
public Vector3 Center;//centro della faccia
public Texture2D Texture;
public VertexPositionNormalTexture[] vertices;
.......
Ma in questa forma mi dà l'errore
Error 4 'T' does not contain a definition for 'Normal' and no extension method 'Normal' accepting a first argument of type 'T' could be found (are you missing a using directive or an assembly reference?)
Avevo anche provato where T : struct e ancora mi diceva che Normal non è ecc. ecc.
Perfino where T : FaceT, FaceH, FaceHT ma la risposta è stata
Error 4 'Progetto_Albireo.FaceT' is not a valid constraint. A type used as a constraint
must be an interface, a non-sealed class or a type parameter.