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 111 112 113 114 115 116 117 118 119 120 121 122 123
|
/***************************************************************************
MultiComponent.cpp
-------------------
begin : Wed Aug 8 2001
copyright : (C) 2001 TIMC (Emmanuel Promayon, Matthieu Chabanas)
email : Emmanuel.Promayon@imag.fr
Date : $Date: 2006/10/17 14:33:21 $
Version : $Revision: 1.12 $
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "MultiComponent.h"
// ------------------ default constructor ---------------------
MultiComponent::MultiComponent(PhysicalModel *p) : Component(p) {
components.clear();
}
// ------------------ constructor with name ---------------------
MultiComponent::MultiComponent(PhysicalModel *p, std::string n) : Component(p,n) {
components.clear();
};
// ------------------ destructor ---------------------
MultiComponent::~MultiComponent() {
deleteProperties();
deleteAllSubComponents();
// tell all parents that I am going away to the paradise of pointers
removeFromParents();
}
// ------------------ deleteAllSubComponents ---------------------
void MultiComponent::deleteAllSubComponents() {
// std::vector<Component *>::iterator it = components.begin();
//std::vector<Component *>::iterator it_tmp;
// while (it != components.end() ) {
// it_tmp = it;
// it++;
// // *it is of type "Component *"
// delete (*it_tmp);
// // "au suivant !"
//
// }
for (unsigned int i=0 ; i<components.size() ; i++)
delete components[i];
components.clear();
}
// --------------- xmlPrint ---------------
void MultiComponent::xmlPrint(std::ostream &o) const {
if (getNumberOfSubComponents()>0) {
o << "<multiComponent";
if (getName() != "")
o<< " name=\"" << getName().c_str() << "\" ";
o << ">" << std::endl;
for (unsigned int i=0; i<components.size(); i++) {
components[i]->xmlPrint(o);
}
o << "</multiComponent>" << std::endl;
}
}
// --------------- getNumberOfCells ---------------
unsigned int MultiComponent::getNumberOfCells() const {
unsigned int nrOfCells = 0;
// add all the cells of all the sub components
for (unsigned int i=0; i<components.size(); i++) {
nrOfCells += components[i]->getNumberOfCells();
}
return nrOfCells;
}
// --------------- getCell ---------------
Cell * MultiComponent::getCell(unsigned int cellOrderNr) const {
bool found;
unsigned int i;
unsigned int startOrderNr;
unsigned int nrOfCells;
if (components.size() == 0)
return NULL;
// check in which component this cell is
i = 0;
startOrderNr = 0;
do {
nrOfCells = components[i]->getNumberOfCells();
found = (cellOrderNr>=startOrderNr && cellOrderNr<(startOrderNr+nrOfCells));
startOrderNr += nrOfCells;
} while (!found && ++i<components.size());
// get it
return components[i]->getCell(cellOrderNr - (startOrderNr - nrOfCells));
}
// --------------- isVisible ---------------
bool MultiComponent::isVisible(const RenderingMode::Mode mode) const {
unsigned int i;
for ( i=0; i<components.size() && !components[i]->isVisible(mode); i++)
;
return (i!=components.size());
}
// --------------- isVisible ---------------
void MultiComponent::setVisible(const RenderingMode::Mode mode, const bool b) {
unsigned int i;
// set all subcomponents
for ( i=0; i<components.size(); i++)
;
components[i]->setVisible(mode, b);
}
|