Skip to content

Commit 2d71eb7

Browse files
committed
accept array as Domain.Media json input
1 parent 433df1f commit 2d71eb7

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

src/mcx_utils.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1540,17 +1540,27 @@ int mcx_loadjson(cJSON *root, Config *cfg){
15401540
cJSON *med=meds->child;
15411541
if(med){
15421542
cfg->medianum=cJSON_GetArraySize(meds);
1543+
if(cfg->prop)
1544+
free(cfg->prop);
15431545
cfg->prop=(Medium*)malloc(sizeof(Medium)*cfg->medianum);
15441546
for(i=0;i<cfg->medianum;i++){
1545-
cJSON *val=FIND_JSON_OBJ("mua",(MCX_ERROR(-1,"You must specify absorption coeff, default in 1/mm"),""),med);
1546-
if(val) cfg->prop[i].mua=val->valuedouble;
1547-
val=FIND_JSON_OBJ("mus",(MCX_ERROR(-1,"You must specify scattering coeff, default in 1/mm"),""),med);
1548-
if(val) cfg->prop[i].mus=val->valuedouble;
1549-
val=FIND_JSON_OBJ("g",(MCX_ERROR(-1,"You must specify anisotropy [0-1]"),""),med);
1550-
if(val) cfg->prop[i].g=val->valuedouble;
1551-
val=FIND_JSON_OBJ("n",(MCX_ERROR(-1,"You must specify refractive index"),""),med);
1552-
if(val) cfg->prop[i].n=val->valuedouble;
1553-
1547+
if(cJSON_IsObject(med)){
1548+
cJSON *val=FIND_JSON_OBJ("mua",(MCX_ERROR(-1,"You must specify absorption coeff, default in 1/mm"),""),med);
1549+
if(val) cfg->prop[i].mua=val->valuedouble;
1550+
val=FIND_JSON_OBJ("mus",(MCX_ERROR(-1,"You must specify scattering coeff, default in 1/mm"),""),med);
1551+
if(val) cfg->prop[i].mus=val->valuedouble;
1552+
val=FIND_JSON_OBJ("g",(MCX_ERROR(-1,"You must specify anisotropy [0-1]"),""),med);
1553+
if(val) cfg->prop[i].g=val->valuedouble;
1554+
val=FIND_JSON_OBJ("n",(MCX_ERROR(-1,"You must specify refractive index"),""),med);
1555+
if(val) cfg->prop[i].n=val->valuedouble;
1556+
}else if(cJSON_IsArray(med)){
1557+
cfg->prop[i].mua=med->child->valuedouble;
1558+
cfg->prop[i].mus=med->child->next->valuedouble;
1559+
cfg->prop[i].g=med->child->next->next->valuedouble;
1560+
cfg->prop[i].n=med->child->next->next->next->valuedouble;
1561+
}else{
1562+
MCX_ERROR(-1,"Session.Media must be either an array of objects or array of 4-elem numerical arrays");
1563+
}
15541564
med=med->next;
15551565
if(med==NULL) break;
15561566
}
@@ -1568,7 +1578,7 @@ int mcx_loadjson(cJSON *root, Config *cfg){
15681578
cfg->dim.y=val->child->next->valueint;
15691579
cfg->dim.z=val->child->next->next->valueint;
15701580
}else{
1571-
if(!Shapes)
1581+
if(!Shapes && cfg->extrajson==NULL)
15721582
MCX_ERROR(-1,"You must specify the dimension of the volume");
15731583
}
15741584
val=FIND_JSON_OBJ("Step","Domain.Step",Domain);

0 commit comments

Comments
 (0)