-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathObjeto.cpp
More file actions
110 lines (93 loc) · 3.38 KB
/
Objeto.cpp
File metadata and controls
110 lines (93 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <limits>
#include "Objeto.h"
// Constructor
Objeto::Objeto() : cantidadVerticesObj(0) {
// Inicialización si es necesario
}
std::string Objeto::obtenerNombreObjeto() {
return nombreObjeto;
}
std::list<Cara> Objeto::obtenerCaras() {
return listaCaras;
}
int Objeto::obtenerCantidadVerticesObj() {
return cantidadVerticesObj;
}
void Objeto::fijarNombreObjeto(std::string objectName) {
this->nombreObjeto = objectName;
}
void Objeto::fijarListaCaras(std::list<Cara> listaCaras) {
this->listaCaras = listaCaras;
}
void Objeto::fijarCantidadVerticesObj(int cantVertices) {
this->cantidadVerticesObj = cantVertices;
}
void Objeto::agregarCara(Cara face) {
listaCaras.push_back(face);
}
void Objeto::eliminarCara(int faceIndex) {
std::list<Cara>::iterator itCaras;
itCaras = listaCaras.begin();
for (; itCaras != listaCaras.end(); itCaras++) {
if (itCaras->obtenerIndiceCar() == faceIndex) {
listaCaras.erase(itCaras);
break;
}
}
}
unsigned int Objeto::contarCaras() {
return listaCaras.size();
}
void Objeto::imprimirObjeto() {
std::cout << "Objeto: " << nombreObjeto << "\n";
//std::cout << "Cantidad de caras: " << contarCaras() << "\n";
std::cout << "Cantidad de caras: " << 6 << "\n";
for (Cara& cara : listaCaras) {
cara.imprimirCara(); // Asegúrate de que el método imprimirCara esté definido en la clase Cara.
}
}
std::vector<Vertice> Objeto::obtenerEsquinas() {
std::vector<Vertice> esquinas(8);
float xMin = std::numeric_limits<float>::max();
float xMax = std::numeric_limits<float>::lowest();
float yMin = std::numeric_limits<float>::max();
float yMax = std::numeric_limits<float>::lowest();
float zMin = std::numeric_limits<float>::max();
float zMax = std::numeric_limits<float>::lowest();
// Recorrer las caras para obtener los vértices y sus posiciones
for (Cara& cara : listaCaras) {
std::list<Arista> aristas = cara.obtenerListaAristas();
for (Arista& arista : aristas) {
std::list<Vertice> vertices = arista.obtenerListaVertices();
for (Vertice& vertice : vertices) {
float x = vertice.obtenerX();
float y = vertice.obtenerY();
float z = vertice.obtenerZ();
// Actualizar límites
if (x < xMin) xMin = x;
if (x > xMax) xMax = x;
if (y < yMin) yMin = y;
if (y > yMax) yMax = y;
if (z < zMin) zMin = z;
if (z > zMax) zMax = z;
}
}
}
// Almacenar las ocho esquinas
esquinas[0] = Vertice(xMin, yMin, zMin); // Esquina 1
esquinas[1] = Vertice(xMax, yMin, zMin); // Esquina 2
esquinas[2] = Vertice(xMax, yMax, zMin); // Esquina 3
esquinas[3] = Vertice(xMin, yMax, zMin); // Esquina 4
esquinas[4] = Vertice(xMin, yMin, zMax); // Esquina 5
esquinas[5] = Vertice(xMax, yMin, zMax); // Esquina 6
esquinas[6] = Vertice(xMax, yMax, zMax); // Esquina 7
esquinas[7] = Vertice(xMin, yMax, zMax); // Esquina 8
return esquinas; // Retorna las esquinas
}
void Objeto::imprimirEsquinas() {
//std::cout << "Esquinas del objeto:\n";
for (int i = 0; i < 8; i++) {
esquinas[i].imprimirVertice(); // Asegúrate de que el método imprimirVertice esté definido en la clase Vertice.
}
}