Skip to content

Commit

Permalink
\# 6 e' stata modificata la funzine che acquisisce i dati da file in …
Browse files Browse the repository at this point in the history
…modo che prenda i dati direttamente all'interno del file e non dal commento

\# 7 e' stata aggiunta la funzione per liberare lo spazio di memori occupato dalla struttura del pistone
\# 8 la struttura del pistone e la sua posizione sono state unite assime per rendere il tutto piu' efficiente
\# 9 e' stato cambiato il commento in conformita' al Doxygen style
  • Loading branch information
lucabeber committed Apr 21, 2021
1 parent e6ab10b commit 43073d8
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 73 deletions.
Binary file modified build/CMakeFiles/mainEntry.dir/main.cpp.o
Binary file not shown.
Binary file modified build/CMakeFiles/mainEntry.dir/src/pistone.cpp.o
Binary file not shown.
Binary file modified build/mainEntry
Binary file not shown.
4 changes: 2 additions & 2 deletions build/pistone.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
57 changes: 35 additions & 22 deletions include/pistone.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,7 @@

/*
* Libreria C per costruire figure in SVG
*/

/** Struttura che rappresenta le dimensioni del pistone
*
*
**/
struct Pistone {
double base; // lunghezza di base del pistone
double altezza; // altezza del pistone
double deltaS; // larghezza della scanalatura del pistone
double deltaH; // altezza della scanalatura del pistone
};
*/

/** Struttura che rappresenta le coordinate da cui viene costruitoil pistone
*
Expand All @@ -27,28 +16,52 @@ struct Posizione{
unsigned int y;
};

/** Funzione che inizializza il pistone richiedendo le lunghezze di base e di altezza
/** Struttura che rappresenta le dimensioni del pistone
*
* - se la base inserita e` minore di 0, ritorna NULL (C-style error signalling)
*/
Pistone* pist_init(int base);
*
**/
struct Pistone {
unsigned int base; // lunghezza di base del pistone
unsigned int altezza; // altezza del pistone
unsigned int deltaS; // larghezza della scanalatura del pistone
unsigned int deltaH; // altezza della scanalatura del pistone
Posizione pos; // posizione del pistone nell'immagine
};

/** Funzione che inizializza il pistone richiedendo le lunghezze di base e di altezza
/** Funzione che inizializza il pistone richiedendo le lunghezze di base e la posizione
*
* @param base lunghezza di base del pistone
*
* - se la base inserita e` minore di 0, ritorna NULL (C-style error signalling)
* @param x coordinata x del pistone
*
* @param y coordinata y del pistone
*
* @return struttura contenente i dati del pistone
*/
Posizione* posiz_pist(unsigned int x, unsigned int y);
Pistone* pist_init(unsigned int base, unsigned int x, unsigned int y);

/** Funzione che crea una stringa svg contenente l'immagine del pisone
*
*
* @param pistone struttura contenente i dati del pistone
*
* @return stringa che contiene i dati in svg del pistone
*/
std::string svg_pist(Pistone* pistone, Posizione* posizione);
std::string svg_pist(Pistone* pistone);

/** Funzione che legge una stringa svg contenente l'immagine del pisone
* e ne costruisce un nuova struct Pistone
* - se non viene trovato alcun pistone la funzione ritorna una struttura vuota
*
* @param file stringa contenente il testo letto da un file svg
*
* @return struttura pistone contenente i dati trovati all'interno del file
*/
Pistone* nuovo_pist(std::string file);

/**
* Funzione che libera lo spazio di memoria occupato dalla struttura pistone
*
* @param pistone spazio di memoria da liberare
*/
void elimina_pist(Pistone* pistone);

#endif //PISTONE_H
58 changes: 44 additions & 14 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,32 @@ using namespace std;

int main() {

cout << "Inizializzazione pistone\n";

int a=20;

Pistone* pistone = pist_init(a);
unsigned int a,b,c;
cout << "Inizializzazione pistone\n Inserire l'area di base del pistone:";
cin >> a;
cout << "Inserire le coordinate x:";
cin >> b,c;
cout << "Inserire le coordinate y:";
cin >> c;

Pistone* pistone;

try {
cout << "Creazione della struttura pistone."<< endl;
pistone = pist_init(a,b,c);
} catch (exception& ex) {
cout << "something bad happened!" << ex.what() << endl;
cout << "I caught the exception, will continue" << endl;
};


cout << "Pistone inizializzato\n";

cout << "Inizializzazione coordinate\n";

Posizione* posizione = posiz_pist(200,200);

cout << "Coordinate inizializzate\n";

cout << "Creazione stringa\n";

string s=svg_pist(pistone,posizione);
string s=svg_pist(pistone);

cout << "Eliminazione struttura pistone";

cout << s << endl;

Expand All @@ -33,8 +42,29 @@ int main() {

svg_to_file("pistone.svg",s);

//nuovo_pist(s);
nuovo_pist(s);
Pistone* pistone2;
try {
cout << "Creazione della struttura pistone."<< endl;
pistone2 = pist_init(a,b,c);
} catch (exception& ex) {
cout << "something bad happened!" << ex.what() << endl;
cout << "I caught the exception, will continue" << endl;
};


cout << "Pistone inizializzato\n";

cout << "Creazione nuova stringa\n";

string s2=svg_pist(pistone2);

cout << s2 << endl;

cout << "Eliminazione struttura pistone";

elimina_pist(pistone);

cout << "\nFine programma";
cout << "\nFine programma\n";
return 0;
}
90 changes: 55 additions & 35 deletions src/pistone.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@

using namespace std;

Pistone* pist_init(int base){
Pistone* pist_init(unsigned int base, unsigned int x, unsigned int y){

// si ritorna il valore null se il valore della base e` minore di 0
// controllo sui valori da inserire nella struttura del pistone
if (base <= 0){
return NULL;
}
throw invalid_argument("La base non puo' avere un valore negativo!");
} else if (base>300) {
throw invalid_argument("Il pistone che stai cercando di cotruire e` troppo grande");
} else if (x<0 || y-base/2<0 || x+base>800 || y>600) {
throw invalid_argument("Le coordinate non sono compatibili con l'immagine");
} else {

// si crea un nuovo puntatore a struttura
Pistone* ret = new Pistone;
Expand All @@ -20,23 +24,14 @@ Pistone* pist_init(int base){
ret->altezza = base/2;
ret->deltaS = base*0.15;
ret->deltaH = ret->altezza*0.3;

return ret;
}

Posizione* posiz_pist(unsigned int x, unsigned int y){

// si crea un nuovo puntatore a struttura
Posizione* ret = new Posizione;

// si assegnano i valori nella nuova struttura creata
ret->x = x;
ret->y = y;

ret->pos.x = x;
ret->pos.y = y;
return ret;

}
}

string svg_pist(Pistone* pistone, Posizione* posizione){
string svg_pist(Pistone* pistone){

// creo un nuovo puntatore a stringa
string ret, virgola = ",", spazio = " ";
Expand All @@ -50,28 +45,28 @@ string svg_pist(Pistone* pistone, Posizione* posizione){
// costruire il pistone.

// coordinate del punto 1
ret = ret + to_string(posizione->x) + virgola + to_string(posizione->y) + spazio;
ret = ret + to_string(pistone->pos.x) + virgola + to_string(pistone->pos.y) + spazio;

// coordinate del punto 2
ret = ret + to_string(posizione->x + pistone->base) + virgola + to_string(posizione->y) + spazio;
ret = ret + to_string(pistone->pos.x + pistone->base) + virgola + to_string(pistone->pos.y) + spazio;

// coordinate del punto 3
ret = ret + to_string(posizione->x + pistone->base) + virgola + to_string(posizione->y - pistone->altezza) + spazio;
ret = ret + to_string(pistone->pos.x + pistone->base) + virgola + to_string(pistone->pos.y - pistone->altezza) + spazio;

// coordinate del punto 4
ret = ret + to_string(posizione->x + pistone->base - pistone->deltaS) + virgola + to_string(posizione->y - pistone->altezza) + spazio;
ret = ret + to_string(pistone->pos.x + pistone->base - pistone->deltaS) + virgola + to_string(pistone->pos.y - pistone->altezza) + spazio;

// coordinate del punto 5
ret = ret + to_string(posizione->x + pistone->base - pistone->deltaS) + virgola + to_string(posizione->y - pistone->altezza + pistone->deltaH) + spazio;
ret = ret + to_string(pistone->pos.x + pistone->base - pistone->deltaS) + virgola + to_string(pistone->pos.y - pistone->altezza + pistone->deltaH) + spazio;

// coordinate del punto 6
ret = ret + to_string(posizione->x + pistone->deltaS) + virgola + to_string(posizione->y - pistone->altezza + pistone->deltaH) + spazio;
ret = ret + to_string(pistone->pos.x + pistone->deltaS) + virgola + to_string(pistone->pos.y - pistone->altezza + pistone->deltaH) + spazio;

// coordinate del punto 7
ret = ret + to_string(posizione->x + pistone->deltaS) + virgola + to_string(posizione->y - pistone->altezza) + spazio;
ret = ret + to_string(pistone->pos.x + pistone->deltaS) + virgola + to_string(pistone->pos.y - pistone->altezza) + spazio;

// coordinate del punto 8
ret = ret + to_string(posizione->x) + virgola + to_string(posizione->y - pistone->altezza)+ "\"" + spazio;
ret = ret + to_string(pistone->pos.x) + virgola + to_string(pistone->pos.y - pistone->altezza)+ "\"" + spazio;

// chiusura della funzione poligono e stile
ret += "style=\"fill:gray,stroke:black,stroke-width:1\" />";
Expand All @@ -82,16 +77,41 @@ string svg_pist(Pistone* pistone, Posizione* posizione){

Pistone* nuovo_pist(string str){

// si trova all'interno della stringa acquisita la parola chiave pistone
string p = "Pistone";
size_t found = str.find(p);

// creo una nuova stringa contenente il valore della base
// si trova all'interno della stringa acquisita la parola p
string p = "polygon points=\""; //16 caratteri
size_t found = str.find(p)+size(p);
size_t found2 = str.find(",",found);
// creo una nuova stringa contenente il valore di x
string new_str;
new_str = str.substr(found+8, found+12);
new_str = str.substr(found, found2);

/* attraverso il comando atoi trasformo la string contenente il valore della
* base in un intero
unsigned int a,b,c;
/* attraverso il comando atoi trasformo la string contenente
* il valore di x in un intero
*/
return pist_init(atoi(new_str.c_str()));
a = atoi(new_str.c_str());

// creo una nuova stringa contenente il valore di y
found = str.find(" ",found2);
new_str = str.substr(found2, found);

/* attraverso il comando atoi trasformo la string contenente
* il valore di y in un intero
*/
b = atoi(new_str.c_str());

// creo una nuova stringa contenente il secondo valore di x
found2 = str.find(",",found);
new_str = str.substr(found, found2);

/* attraverso il comando atoi trasformo la string contenente
* il secondo valore di x in un intero
*/
c = atoi(new_str.c_str());

return pist_init(c-a,a,b);
}

void elimina_pist(Pistone* pistone){
delete pistone;
}

0 comments on commit 43073d8

Please sign in to comment.