Skip to content

Commit

Permalink
Merge pull request #1872 from gforney/master
Browse files Browse the repository at this point in the history
fix to geom coloring when COLOR is specified on an fds input &GEOM line
  • Loading branch information
gforney committed Apr 16, 2024
2 parents f05aa73 + 83d4cc1 commit 4ef122d
Show file tree
Hide file tree
Showing 10 changed files with 1,402 additions and 3 deletions.
10 changes: 9 additions & 1 deletion Source/smokeview/IOgeometry.c
Expand Up @@ -3876,6 +3876,7 @@ FILE_SIZE ReadGeom2(geomdata *geomi, int load_flag, int type){
}

CheckMemory;
assert(geomi->ngeomobj_offsets<=0 || ntris==geomi->ngeomobj_offsets);
for(ii=0;ii<ntris;ii++){
surfdata *surfi;
int k;
Expand Down Expand Up @@ -3910,7 +3911,12 @@ FILE_SIZE ReadGeom2(geomdata *geomi, int load_flag, int type){
triangles[ii].geomobj = geomi->geomobjinfo+geomi->file2_tris[ii]-1;
}
else{
triangles[ii].geomobj = NULL;
if(geomi->ngeomobj_offsets>0 && ii < geomi->ngeomobj_offsets && geomi->geomobj_offsets != NULL){
triangles[ii].geomobj = geomi->geomobjinfo + geomi->geomobj_offsets[ii];
}
else{
triangles[ii].geomobj = geomi->geomobjinfo;
}
}
break;
case GEOM_SLICE:
Expand Down Expand Up @@ -5711,6 +5717,8 @@ void InitGeom(geomdata *geomi,int geomtype, int fdsblock, int have_cface_normals
geomi->have_cface_normals = have_cface_normals_arg;
geomi->ncface_normals = 0;
geomi->cface_normals = NULL;
geomi->geomobj_offsets = NULL;
geomi->ngeomobj_offsets = 0;
}

/* ------------------ RotateU2V ------------------------ */
Expand Down
28 changes: 27 additions & 1 deletion Source/smokeview/readsmv.c
Expand Up @@ -8457,7 +8457,11 @@ int ReadSMV_Parse(bufferstreamdata *stream) {

if(ngeomobjinfo>0){
geomi->ngeomobjinfo = ngeomobjinfo;
geomi->geomobj_offsets = NULL;
NewMemory((void **)&geomi->geomobjinfo,ngeomobjinfo*sizeof(geomobjdata));
int ntotal_triangles;

ntotal_triangles = 0;
for(i=0;i<ngeomobjinfo;i++){
geomobjdata *geomobji;
float *center;
Expand All @@ -8468,6 +8472,7 @@ int ReadSMV_Parse(bufferstreamdata *stream) {

geomobji->texture_name=NULL;
geomobji->texture_mapping=TEXTURE_RECTANGULAR;
geomobji->ntriangles = -1;

FGETS(buffer,255,stream);

Expand All @@ -8478,10 +8483,12 @@ int ReadSMV_Parse(bufferstreamdata *stream) {
if(colorlabel!=NULL){
int colors[3] = {-1, -1, -1};
float transparency = -1.0;
int ntriangles;

colorlabel++;
if(colorlabel!=buffer)colorlabel[-1] = 0;
sscanf(colorlabel, "%i %i %i %f", colors, colors+1, colors+2, &transparency);
ntriangles = -1;
sscanf(colorlabel, "%i %i %i %f %i", colors, colors+1, colors+2, &transparency, &ntriangles);
if(colors[0]>=0&&colors[1]>=0&&colors[2]>=0){
float fcolors[4];

Expand All @@ -8493,6 +8500,8 @@ int ReadSMV_Parse(bufferstreamdata *stream) {
geomobji->color = GetColorPtr(fcolors);
geomobji->use_geom_color = 1;
}
geomobji->ntriangles = ntriangles;
if(ntriangles > 0)ntotal_triangles += ntriangles;
}

texture_mapping = TrimFront(buffer);
Expand Down Expand Up @@ -8525,6 +8534,23 @@ int ReadSMV_Parse(bufferstreamdata *stream) {
geomobji->texture_mapping=TEXTURE_SPHERICAL;
}
}
geomi->ngeomobj_offsets = ntotal_triangles;
geomi->geomobj_offsets = NULL;
if(ntotal_triangles>0){
int count;

NewMemory((void **)&geomi->geomobj_offsets,ntotal_triangles*sizeof(int));
count = 0;
for(i=0;i<ngeomobjinfo;i++){
geomobjdata *geomobji;
int j;

geomobji = geomi->geomobjinfo + i;
for(j=0;j<geomobji->ntriangles;j++){
geomi->geomobj_offsets[count++] = i;
}
}
}
}

ngeominfo++;
Expand Down
4 changes: 3 additions & 1 deletion Source/smokeview/structures.h
Expand Up @@ -133,7 +133,7 @@ typedef struct _geomobjdata {
char *texture_name;
float texture_width, texture_height, texture_center[3];
int texture_mapping;
int use_geom_color;
int use_geom_color, ntriangles;
} geomobjdata;

/* -------------------------- geomdata ------------------------------------ */
Expand All @@ -157,6 +157,8 @@ typedef struct _geomdata {
struct _surfdata *surfgeom;
geomlistdata *geomlistinfo,*geomlistinfo_0, *currentframe;
geomobjdata *geomobjinfo;
int *geomobj_offsets;
int ngeomobj_offsets;
} geomdata;


Expand Down
27 changes: 27 additions & 0 deletions Verification/Visualization/color_geom.fds
@@ -0,0 +1,27 @@
&HEAD CHID='color_geom', TITLE='color' /
#Mesh
&MESH XB= 0.0, 83.0, 0.0, 34.0, 0.0, 9.0, IJK= 80, 35, 36 /

&TIME T_END=0. /
&SURF ID='WALL', RGB=255,0,0 /
&GEOM ID='Wall_1', SURF_ID='WALL',
VERTS=
9.0, 5.0, 0.0,
9.0, 5.0, 3.5,
39.0, 20.0, 3.5,
39.0, 20.0, 0.0
POLY=1, 2, 3, 4,
EXTRUDE=10.0
COLOR='BLACK' /

&GEOM ID='Wall_2', SURF_ID='WALL',
VERTS=
48.0, 5.0, 0.0,
48.0, 5.0, 3.5,
78.0, 20.0, 3.5,
78.0, 20.0, 0.0
POLY=1, 2, 3, 4,
EXTRUDE=10.0
/

&TAIL /

0 comments on commit 4ef122d

Please sign in to comment.