Skip to content

Commit f1fab1b

Browse files
refactor readobject.c
This undertakes a slightly more invasive refactor of readobject.
1 parent 1ed2c81 commit f1fab1b

18 files changed

+404
-233
lines changed

Source/shared/readobject.c

Lines changed: 124 additions & 109 deletions
Large diffs are not rendered by default.

Source/shared/readobject.h

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -371,33 +371,41 @@ typedef struct {
371371
sv_object object_def_last;
372372
/** @brief A number of standard objects to be used. */
373373
std_objects std_object_defs;
374+
int iavatar_types;
375+
int navatar_types;
376+
sv_object **avatar_types;
377+
sv_object *avatar_defs_backup[2];
374378
} object_collection;
375379

376380
/**
377-
* @brief Initialise an @ref object_collection and avatar types.
381+
* @brief Initialise an @ref object_collection.
382+
*
383+
* @returns A @ref object_collection which has been properly initialized.
384+
*/
385+
object_collection *CreateObjectCollection(void);
386+
387+
/**
388+
* @brief Read objects from the standard file locations, using fallback objects
389+
* if object definitions are not found.
378390
*
379391
* @param[inout] objectscoll Pointer to the location of the @ref
380-
* object_collection to initialize.
381-
* @param[in] setbw Set the colors to black and white.
382-
* @param[inout] avatar_types Linked-list of avatar types. TODO: include in
383-
* object_collection.
384-
* @param[in] avatar_defs_backup Backup avatar types. TODO: include in
385-
* object_collection.
392+
* object_collection to read object definitions into. This @ref
393+
* object_collection
386394
* @param[in] smokeview_bindir The path which contains the smokeview binary.
387-
* Object definition files from this directory are read.
395+
* Object definition files from this directory are read. If NULL, this step is
396+
* skipped.
388397
* @param[in] setbw Set the colors to black and white.
389398
* @param[in] fdsprefix The fdsprefix. This is used to find case-specific object
390-
* files (e.g., "${fdsprefix}.svo").
399+
* files (e.g., "${fdsprefix}.svo"). If NULL, such files are never read.
391400
* @param[in] isZoneFireModel Is this model a zone fire model.
392401
*/
393-
void InitObjectCollection(object_collection *objectscoll, int navatar_types,
394-
sv_object **avatar_types,
395-
sv_object *avatar_defs_backup[2],
396-
const char *smokeview_bindir, const char *fdsprefix,
397-
int setbw, int isZoneFireModel);
402+
void ReadDefaultObjectCollection(object_collection *objectscoll,
403+
const char *smokeview_bindir,
404+
const char *fdsprefix, int setbw,
405+
int isZoneFireModel);
398406
/**
399-
* @brief Free an @ref object_collection previously initialized by @ref
400-
* InitObjectCollection.
407+
* @brief Free an @ref object_collection previously created by @ref
408+
* CreateObjectCollection.
401409
*
402410
* @param[inout] objectscoll The @ref object_collection to free.
403411
*/
@@ -424,7 +432,18 @@ sv_object *GetSmvObject(object_collection *objectscoll, char *label);
424432
*/
425433
sv_object *GetSmvObjectType(object_collection *objectscoll, char *olabel,
426434
sv_object *default_object);
427-
435+
/**
436+
* @brief Read in object definitions from an object file and add them to an
437+
* object collection.
438+
*
439+
* @param[inout] nobject_defs The number of object definitions in object_defs
440+
* @param[in] file The file path to read from
441+
* @param[out] setbw A boolean value to set wether these objects should be set
442+
* to black and white
443+
*
444+
* @returns The number of objects read
445+
*/
446+
int ReadObjectDefs(object_collection *objectscoll, const char *file, int setbw);
428447
// END MAIN API
429448

430449
// These still need to be documented.

Source/smokeview/IOobjects.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3823,15 +3823,15 @@ void DrawSmvObject(sv_object *object_dev, int iframe_local, propdata *prop, int
38233823
object = object_dev;
38243824
}
38253825
if(object->visible == 0 && vis_override == 0)return;
3826-
if(object == objectscoll.std_object_defs.missing_device&&show_missing_objects == 0)return;
3826+
if(object == objectscoll->std_object_defs.missing_device&&show_missing_objects == 0)return;
38273827
if(iframe_local > object->nframes - 1 || iframe_local < 0)iframe_local = 0;
38283828
framei = object->obj_frames[iframe_local];
38293829

38303830
assert(framei->error == 0 || framei->error == 1);
38313831

38323832
if(framei->error == 1){
3833-
object = objectscoll.std_object_defs.error_device;
3834-
framei = objectscoll.std_object_defs.error_device->obj_frames[0];
3833+
object = objectscoll->std_object_defs.error_device;
3834+
framei = objectscoll->std_object_defs.error_device->obj_frames[0];
38353835
prop = NULL;
38363836
}
38373837

@@ -4059,7 +4059,7 @@ void DrawSmvObject(sv_object *object_dev, int iframe_local, propdata *prop, int
40594059
iframe_local2 = 0;
40604060
}
40614061
object_name = (toki - 1)->string;
4062-
included_object = GetSmvObjectType(&objectscoll, object_name, objectscoll.std_object_defs.missing_device);
4062+
included_object = GetSmvObjectType(objectscoll, object_name, objectscoll->std_object_defs.missing_device);
40634063
toki->included_frame = iframe_local2;
40644064
toki->included_object = included_object;
40654065
}
@@ -5863,10 +5863,10 @@ void InitializeDeviceCsvData(int flag){
58635863
void UpdateObjectUsed(void){
58645864
int i;
58655865

5866-
for(i = 0; i<objectscoll.nobject_defs; i++){
5866+
for(i = 0; i<objectscoll->nobject_defs; i++){
58675867
sv_object *obj_typei;
58685868

5869-
obj_typei = objectscoll.object_defs[i];
5869+
obj_typei = objectscoll->object_defs[i];
58705870
obj_typei->used_by_device = 0;
58715871
}
58725872
for(i = 0; i<ndeviceinfo; i++){

Source/smokeview/IOtour.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ void DrawTours(void){
396396

397397
glRotatef(az_angle,0.0,0.0,1.0);
398398

399-
DrawSmvObject(avatar_types[touri->glui_avatar_index],0,NULL,0,NULL,0);
399+
DrawSmvObject(objectscoll->avatar_types[touri->glui_avatar_index],0,NULL,0,NULL,0);
400400
glPopMatrix();
401401
}
402402
break;

Source/smokeview/c_api.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -943,8 +943,8 @@ void SurfacesHideAll() {
943943
}
944944

945945
void DevicesHideAll() {
946-
for (size_t i = 0; i < objectscoll.nobject_defs; i++) {
947-
sv_object *objecti = objectscoll.object_defs[i];
946+
for (size_t i = 0; i < objectscoll->nobject_defs; i++) {
947+
sv_object *objecti = objectscoll->object_defs[i];
948948
objecti->visible = 0;
949949
}
950950
}
@@ -3664,13 +3664,13 @@ int SetShowdevices(int ndevices_ini, const char *const *names) {
36643664

36653665
char tempname[255]; // temporary buffer to convert from const string
36663666

3667-
for (size_t i = 0; i < objectscoll.nobject_defs; i++) {
3668-
obj_typei = objectscoll.object_defs[i];
3667+
for (size_t i = 0; i < objectscoll->nobject_defs; i++) {
3668+
obj_typei = objectscoll->object_defs[i];
36693669
obj_typei->visible = 0;
36703670
}
36713671
for (size_t i = 0; i < ndevices_ini; i++) {
36723672
strncpy(tempname, names[i], 255 - 1); // use temp buffer
3673-
obj_typei = GetSmvObject(&objectscoll, tempname);
3673+
obj_typei = GetSmvObject(objectscoll, tempname);
36743674
// obj_typei = GetSmvObject(names[i]);
36753675
if (obj_typei != NULL) {
36763676
obj_typei->visible = 1;

Source/smokeview/callbacks.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -777,7 +777,7 @@ int ColorbarClick(int x, int y){
777777
return_val = HandleColorbarIndex(colorbar_index);
778778
return return_val;
779779
}
780-
780+
781781
/* ------------------ GetTimeBarFrame ------------------------ */
782782

783783
int GetTimeBarFrame(int xm){
@@ -1969,14 +1969,14 @@ void Keyboard(unsigned char key, int flag){
19691969
break;
19701970
case 'i':
19711971
if(keystate==GLUT_ACTIVE_ALT){ // toggle device visibility
1972-
if(objectscoll.nobject_defs>0){
1972+
if(objectscoll->nobject_defs>0){
19731973
int vis;
19741974

1975-
vis = 1-objectscoll.object_defs[0]->visible;
1976-
for(i = 0; i<objectscoll.nobject_defs; i++){
1975+
vis = 1-objectscoll->object_defs[0]->visible;
1976+
for(i = 0; i<objectscoll->nobject_defs; i++){
19771977
sv_object *objecti;
19781978

1979-
objecti = objectscoll.object_defs[i];
1979+
objecti = objectscoll->object_defs[i];
19801980
objecti->visible = vis;
19811981
}
19821982
updatemenu = 1;
@@ -2016,23 +2016,23 @@ void Keyboard(unsigned char key, int flag){
20162016
devicei->selected = selected;
20172017
}
20182018
}
2019-
if(objectscoll.nobject_defs>0){
2019+
if(objectscoll->nobject_defs>0){
20202020
int makevis=1;
20212021

2022-
for(i = 0; i<objectscoll.nobject_defs; i++){
2022+
for(i = 0; i<objectscoll->nobject_defs; i++){
20232023
sv_object *objecti;
20242024

2025-
objecti = objectscoll.object_defs[i];
2025+
objecti = objectscoll->object_defs[i];
20262026
if(objecti->visible==1){
20272027
makevis = 0;
20282028
break;
20292029
}
20302030
}
20312031
if(makevis==1){
2032-
for(i = 0; i<objectscoll.nobject_defs; i++){
2032+
for(i = 0; i<objectscoll->nobject_defs; i++){
20332033
sv_object *objecti;
20342034

2035-
objecti = objectscoll.object_defs[i];
2035+
objecti = objectscoll->object_defs[i];
20362036
objecti->visible = 1;
20372037
}
20382038
}

Source/smokeview/colortable.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <stdio.h>
44
#include <string.h>
5+
56
#include GLUT_H
67
#include <math.h>
78

Source/smokeview/glui_tour.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,11 +254,11 @@ extern "C" void GLUITourSetup(int main_window){
254254
glui_tour->add_spinner_to_panel(PANEL_path, _("points"), GLUI_SPINNER_INT, &tour_ntimes, VIEW_times, TourCB);
255255
PANEL_misc = glui_tour->add_panel_to_panel(ROLLOUT_settings, "Misc", true);
256256
CHECKBOX_showintermediate = glui_tour->add_checkbox_to_panel(PANEL_misc, _("Show intermediate path nodes"), &show_path_knots);
257-
if(navatar_types > 0){
257+
if(objectscoll->navatar_types > 0){
258258
glui_tour->add_checkbox_to_panel(PANEL_misc, _("Show avatar"), &show_avatar);
259259
LISTBOX_avatar = glui_tour->add_listbox_to_panel(PANEL_misc, _("Avatar:"), &glui_avatar_index, TOUR_AVATAR, TourCB);
260-
for(i = 0;i < navatar_types;i++){
261-
LISTBOX_avatar->add_item(i, avatar_types[i]->label);
260+
for(i = 0;i < objectscoll->navatar_types;i++){
261+
LISTBOX_avatar->add_item(i, objectscoll->avatar_types[i]->label);
262262
}
263263
if(tourlocus_type == 0){
264264
glui_avatar_index = -1;
@@ -267,7 +267,7 @@ extern "C" void GLUITourSetup(int main_window){
267267
glui_avatar_index = -2;
268268
}
269269
else{
270-
glui_avatar_index = iavatar_types;
270+
glui_avatar_index = objectscoll->iavatar_types;
271271
}
272272
LISTBOX_avatar->set_int_val(glui_avatar_index);
273273
}
@@ -690,7 +690,7 @@ void TourCB(int var){
690690
if(selected_tour->glui_avatar_index!=glui_avatar_index){
691691
selected_tour->glui_avatar_index=glui_avatar_index;
692692
// hack to make touring avatar show up
693-
avatar_types[glui_avatar_index]->visible=1;
693+
objectscoll->avatar_types[glui_avatar_index]->visible=1;
694694
updatemenu=1;
695695
}
696696
if(glui_avatar_index==-1){
@@ -701,7 +701,7 @@ void TourCB(int var){
701701
}
702702
else{
703703
tourlocus_type=2;
704-
iavatar_types=glui_avatar_index;
704+
objectscoll->iavatar_types=glui_avatar_index;
705705
}
706706
break;
707707
case TOUR_UPDATELABEL:

Source/smokeview/main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -944,5 +944,6 @@ int main(int argc, char **argv){
944944
PRINTF("Startup time: %.1f s\n", startup_time);
945945

946946
glutMainLoop();
947+
FreeVars();
947948
return 0;
948949
}

0 commit comments

Comments
 (0)