-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPossibleVertices.cpp
More file actions
109 lines (93 loc) · 3.09 KB
/
Copy pathPossibleVertices.cpp
File metadata and controls
109 lines (93 loc) · 3.09 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
#include "ThreeDModelGenerator.h"
#include "debug.h"
#include <cstdlib>
#include <iostream>
#include <vector>
//frontView has z = 0, topView has x = 0
Point* combineFrontTop(Point* p1, Point* p2, int p1Size, int p2Size, int &combinedSize){
std::vector<Point> combinedPoints;
Point* p2_temp = p2;
for(int i = 0; i < p1Size; i++){
for(int j = 0; j < p2Size; j++){
//std::cout<<"xxx"<<std::endl;
//printPoint(*p1);
//printPoint(*p2);
if((*p1).getY() == (*p2).getY()){
Point newPoint;
newPoint.setX( (*p1).getX());
newPoint.setY( (*p1).getY());
newPoint.setZ ((*p2).getZ());
combinedPoints.push_back(newPoint);
}
p2++;
}
p2 = p2_temp;
p1++;
}
combinedSize = combinedPoints.size();
Point* arrayCombinedPoints = (Point*)malloc (combinedSize*sizeof(Point));
for(int i = 0; i < combinedSize ; i++){
Point n = combinedPoints[i];
arrayCombinedPoints[i] = combinedPoints[i];
}
return arrayCombinedPoints;
}
bool sideViewContainsCombined(Point p, TwoDView sideView){
Point* sidePoints = sideView.getPoints();
for(int i = 0 ; i < sideView.getPointSize(); i++){
/*std::cout << "llll" << std::endl;
printPoint(p);
printPoint(*sidePoints);*/
if((*sidePoints).getX() == p.getX() && (*sidePoints).getZ() == p.getZ()){
return true;
}
sidePoints++;
}
return false;
}
bool removePointsContains(PointList removePointsList, Point p){
Point* removePoints = removePointsList.getPoints();
for(int i = 0 ; i < removePointsList.getSize(); i++){
std::cout << "SEE HERE" << std::endl;
printPoint(p);
printPoint(removePoints[i]);
if(removePoints[i].getX() == p.getX() && removePoints[i].getY() == p.getY() && removePoints[i].getZ() == p.getZ()){
return true;
}
}
return false;
}
void ThreeDModelGenerator::PossibleVerticesConstructor(){
TwoDView frontView = model.getFrontView();
TwoDView topView = model.getTopView();
TwoDView sideView = model.getSideView();
std::vector<Point> threeDPoints;
Point* frontPoints = frontView.getPoints();
Point* topPoints = topView.getPoints();
int combineFrontTopSize;
Point* combinedFrontTop = combineFrontTop(frontPoints, topPoints, frontView.getPointSize(), topView.getPointSize(), combineFrontTopSize);
/*std::cout << "$$$$$$" << combineFrontTopSize << std::endl;
for (int i = 0; i < combineFrontTopSize; i++){
printPoint(combinedFrontTop[i]);
}*/
//remove duplicates
int count = 0;
for(int i = 0; i < combineFrontTopSize; i++){
if(sideViewContainsCombined(combinedFrontTop[i], sideView) && !removePointsContains(removePoints, combinedFrontTop[i])){
//printPoint(*combinedFrontTop);
threeDPoints.push_back(combinedFrontTop[i]);
//printPoint(*combinedFrontTop);
count++;
}
}
std::cout << "hereeee" << std::endl;
Point* arrayThreeDPoints = (Point*)malloc (count*sizeof(Point));
for(int i = 0; i < count ; i++){
arrayThreeDPoints[i] = threeDPoints[i];
printPoint(threeDPoints[i]);
}
PointList temp;
temp.setPoints(arrayThreeDPoints);
temp.setSize(count);
possibleVertices = temp;
}