diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/hackvr.c | 60 | 
1 files changed, 30 insertions, 30 deletions
| diff --git a/src/hackvr.c b/src/hackvr.c index a90a3ae..5ec27dc 100644 --- a/src/hackvr.c +++ b/src/hackvr.c @@ -151,6 +151,8 @@ int hackvr_handler(char *line) {    int len;    int j,i,k,l;    c3_group_rot_t *gr; +  c3_s_t *s; +  c3_s_t s2;    real tmpx,tmpy,tmpz;    char **a;    char tmp[256]; @@ -247,29 +249,6 @@ int hackvr_handler(char *line) {      return ret;     }    } -  if(!strcmp(command,"apply")) { -   /*gr=get_group_relative(a[2]); -   if(gr) { -     for(j=0;global.shape[j] && j < MAXSHAPES;j++) { -       if(!glob_match(a[2],global.shape[j].id)) { -         for(k=0;k<global.shape[j].len+(global.shape[j].len==1);k++) { -           //apply the movement stored in this gr to the shapes themselves. -           //after taking into account the rotation. -           //this code is the same as the code in graphics_c3 but this is object specific. -           global.shape[j].p[k]=c3_add(gr->p,rotate_c3_yr(global.shape[j].p[k]); -         } -         gr->p.x=gr->p.y=gr->p.z=0; - -         gr->r.x=0; -         gr->r.y=0; -         gr->r.z=0; -       } -     } -     //we don't need this gr anymore. -     //we could clean it up, but its values are already zero. -   }*/ -   fprintf(stderr,"# this group doesn't have a gr.\n"); -  }    if(!strcmp(command,"deletegroup")) {//should the grouprot get deleted too? sure...     if(len == 3) {      for(j=0;global.shape[j] && j < MAXSHAPES;j++) { @@ -439,19 +418,19 @@ int hackvr_handler(char *line) {    }    if(!strcmp(command,"export")) {//dump shapes and group rotation for argument (or all if arg is *)     if(len > 2) { -    for(i=0;global.shape[i];i++) {//require a[2], if not it'll segfault. derrrr, epoch. -     if(!glob_match(a[2],global.shape[i]->id)) { +    for(i=0;global.shape[i];i++) { +//     if(!glob_match(a[2],global.shape[i]->id)) {        printf("%s_%s addshape %d %d",id,global.shape[i]->id,global.shape[i]->attrib.col,global.shape[i]->len);        for(j=0;j < global.shape[i]->len+(global.shape[i]->len==1);j++) {         printf(" %f %f %f",global.shape[i]->p[j].x,global.shape[i]->p[j].y,global.shape[i]->p[j].z);        }//possible TODO: should I combine the string and output it all at once instead of throughout a loop?        printf("\n"); -     } +//     }      }      for(i=0;global.group_rot[i];i++) {       if(!glob_match(a[2],global.group_rot[i]->id)) { -      printf("%s_%s rotate %d %d %d\n",id,a[2],global.group_rot[i]->r.x.d,global.group_rot[i]->r.y.d,global.group_rot[i]->r.z.d); -      printf("%s_%s move %f %f %f\n",id,a[2],global.group_rot[i]->p.x,global.group_rot[i]->p.y,global.group_rot[i]->p.z); +/*      printf("%s_%s rotate %d %d %d\n",id,a[2],global.group_rot[i]->r.x.d,global.group_rot[i]->r.y.d,global.group_rot[i]->r.z.d); +      printf("%s_%s move %f %f %f\n",id,a[2],global.group_rot[i]->p.x,global.group_rot[i]->p.y,global.group_rot[i]->p.z);*/       }      }     } @@ -521,9 +500,30 @@ int hackvr_handler(char *line) {        printf("%s rotate %d %d %d\n",global.user,global.camera.r.x.d,global.camera.r.y.d,global.camera.r.z.d);       }    } -  if(!strcmp(command,"move")) { +  if(!strcmp(command,"flatten")) { +   if(len > 1) { +    //for each shape, we need to apply_group_relative.. +    gr = get_group_relative(id); +    for(i=0;global.shape[i];i++) { +     if(!strcmp(global.shape[i]->id,id)) { +      //this doesn't need to bother with free() or malloc(). it does struct assignment. ;) +      (*global.shape[i])=apply_group_relative((*global.shape[i]),gr);//the old id string gets used in here +     } +    } +    //clean out the gr struct so it won't be applied anymore. +    //might split the rotation and translation into separate commands later. +    gr->r.x.d=0; +    gr->r.y.d=0; +    gr->r.z.d=0; +    gr->p.x=0; +    gr->p.y=0; +    gr->p.z=0; +   } +   return ret; +  } +  if(!strcmp(command,"move")) {//this is only moving the first group_rot it finds instead of all group_rots that match the pattern     if(len > 2) { -    for(i=0;global.group_rot[i];i++) { +    for(i=0;global.group_rot[i];i++) {//make this faster. hash table?       if(!strcmp(global.group_rot[i]->id,id)) {        break;       } | 
