Приложение В. Некоторые полезные классы и служебные подпрограммы
} // end of whichtoken // конец whichtoken
11««««« drawSceneOpenGL »»»»»»»».
void Scene :: drawSceneOpenGLО
{ //draw each object on object list
// рисуем каждый объект из списка объектов
for(GeomObj* р - obj: р : р - p->next) p->drawOpenGL(): //draw it
}
//«««««««< Scene :: read »»»»»»»»
bool Scene:: read(string fname)
// return true if ok: else false
// возвращаем true, если все ok: иначе false
{
file_in - new ifstream(fname.c_str()):
if(!(*file in))
{
cout « "I can't find or open file: " « fname « endl; //не могу найти или открыть файл return false;
}
f_in - new strstreamO: line - nextline - 1: def_stack - new DefUnitStackO; char ch:
freeSceneO: //delete any previous scene // удаляем любую предшествующую сцену // Initialize all for reading: // инициализируем все для чтения
obj - tail - NULL:
light - NULL:
affStk.tos - new AffineNode:
affStk.tos->next - NULL:
while (file_in->get(ch)) {*f_in « ch:} // read whole file // читаем весь файл
while(l)
//read file, collecting objects, until EOF or an error // читаем файл, собирая объекты, до конца файла или ошибки {
GeomObj * shp - getObjectO: // get the next shape // получаем следующую форму
if(lshp) break: // no object: either error or EOF // нет объекта: ошибка или конец файла
shp->next - NULL: // to be safe
1f(obj - NULL){ obj - tail - shp;} // empty list so far // список пока пуст
else{tail->next - shp: tail - shp:} // add new object to queue // добавляем новый объект в очередь
ВЗ. Класс SCENE и сопутствующие классы
}
file_in->close():
cleanllpO: // delete temp lists, etc. // удаляем временные списки и т. д.
return true:
}
// end of readO // конец readO
//««««««« Scene :: getObject >»»»»»»» GeomObj* Scene :: getObjectO