ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/xyz2pov/src/xyz2pov.c
(Generate patch)

Comparing trunk/xyz2pov/src/xyz2pov.c (file contents):
Revision 515 by mmeineke, Thu May 1 17:36:33 2003 UTC vs.
Revision 868 by gezelter, Wed Nov 19 16:26:33 2003 UTC

# Line 16 | Line 16 | struct linked_xyz{
16  
17   struct linked_xyz{
18    struct coords *r;
19 <  double boxX, boxY, boxZ;
19 >  double Hmat[3][3];
20    struct linked_xyz *next;
21   };
22  
# Line 24 | Line 24 | int draw_atoms = 0; /*boolean to draw atoms */
24   int draw_bonds = 0; /* boolean to draw bonds or not */
25   int draw_hydrogens = 0; /*boolean to draw hydrogens */
26   int draw_atoms = 0; /*boolean to draw atoms */
27 + int draw_vectors = 0; /*boolean to draw vectors */
28   int draw_box = 0;  // boolean to draw the periodic Box
29   int regenerateBonds = 0; // boolean to regenearate bonds each frame
30  
31   void usage(void);
32 + int count_tokens(char *line, char *delimiters);
33  
34   int main(argc, argv)
35       int argc;
# Line 37 | Line 39 | int main(argc, argv)
39  
40    struct coords *out_coords;
41  
42 <  int i,j; /* loop counters */
42 >  int i,j,k; /* loop counters */
43    mode_t dir_mode = S_IRWXU;
44  
45    int generate_header = 0; /* boolean for generating the pov ray header */
# Line 47 | Line 49 | int main(argc, argv)
49    double small_x = 0;
50    double small_y = 0; /* lets me know the smallest x, y, z */
51    double small_z = 0;
52 +  int extremaSet = 0;
53    double rsqr; /* the square of the diagonal */
54    double diagonal; /* the diagonal length of the sim box */
55  
56    unsigned int n_atoms; /*the number of atoms in each time step */
57 <  char read_buffer[120]; /*the line buffer for reading */
57 >  char read_buffer[2000]; /*the line buffer for reading */
58    char *eof_test; /*ptr to see when we reach the end of the file */
59    char *foo; /*the pointer to the current string token */
60    FILE *in_file; /* the input file */
# Line 66 | Line 69 | int main(argc, argv)
69    char current_flag;
70    int nFrames;
71    int nZeroes;
72 +  int nTokens;
73    double count;
74  
75    int startFrame = 1;
# Line 79 | Line 83 | int main(argc, argv)
83    
84    unsigned int n_interpolate = 0; /* number of frames to interpolate */
85    double dx, dy, dz; /* temp variables for interpolating distances */
86 +  double dm[3][3];
87    
88  
89    char pov_dir[500]; /* the pov_dir */
# Line 179 | Line 184 | int main(argc, argv)
184              // -a => draw the atoms
185  
186              draw_atoms = 1;
187 +            break;
188 +
189 +          case 'v':
190 +            // -v => draw the vectors
191 +
192 +            draw_vectors = 1;
193              break;
194  
195            case 'r':
# Line 270 | Line 281 | int main(argc, argv)
281      out_prefix = strtok(in_name, ".");
282    }
283  
284 <  sprintf( out_format, "%s%s%%0%dd.pov", pov_dir, out_prefix, nZeroes );
284 >  sprintf( out_format, "%s%s-%%0%dd.pov", pov_dir, out_prefix, nZeroes );
285  
286    // start reading the first frame
287  
# Line 302 | Line 313 | int main(argc, argv)
313      if( draw_box ){
314        foo = strtok(read_buffer, " ,;\t");
315        if(foo == NULL){
316 <        printf("error in reading file\n");
316 >        printf("error in reading file time\n");
317          exit(8);
318        }
319        
320        foo = strtok(NULL, " ,;\t");
321        if(foo == NULL){
322 <        printf("error in reading file\n");
322 >        printf("error in reading file h00\n");
323          exit(8);
324        }
325 <      current_frame->boxX = atof( foo );
325 >      current_frame->Hmat[0][0] = atof( foo );
326  
327        foo = strtok(NULL, " ,;\t");
328        if(foo == NULL){
329 <        printf("error in reading file\n");
329 >        printf("error in reading file h10\n");
330          exit(8);
331        }
332 <      current_frame->boxY = atof( foo );
332 >      current_frame->Hmat[1][0] = atof( foo );
333  
334        foo = strtok(NULL, " ,;\t");
335        if(foo == NULL){
336 <        printf("error in reading file\n");
336 >        printf("error in reading file h20\n");
337          exit(8);
338        }
339 <      current_frame->boxZ = atof( foo );
329 <    }
339 >      current_frame->Hmat[2][0] = atof( foo );
340  
341 <    for( i=0; i < n_atoms; i++){
342 <      
343 <      eof_test = fgets(read_buffer, sizeof(read_buffer), in_file);
334 <      if(eof_test == NULL){
335 <        printf("error in reading file\n");
341 >      foo = strtok(NULL, " ,;\t");
342 >      if(foo == NULL){
343 >        printf("error in reading file h01\n");
344          exit(8);
345        }
346 +      current_frame->Hmat[0][1] = atof( foo );
347  
348 <      foo = strtok(read_buffer, " ,;\t");
348 >      foo = strtok(NULL, " ,;\t");
349        if(foo == NULL){
350 <        printf("error in reading file\n");
350 >        printf("error in reading file h11\n");
351          exit(8);
352        }
353 <      (void)strcpy(current_frame->r[i].name, foo); /*copy the atom name */
353 >      current_frame->Hmat[1][1] = atof( foo );
354  
346      /* next we grab the positions */
347      
355        foo = strtok(NULL, " ,;\t");
356        if(foo == NULL){
357 <        printf("error in reading file\n");
357 >        printf("error in reading file h21\n");
358          exit(8);
359        }
360 <      (void)sscanf(foo, "%lf",&current_frame->r[i].x);
361 <      if(current_frame->r[i].x > big_x) big_x = current_frame->r[i].x;
355 <      if(current_frame->r[i].x < small_x) small_x = current_frame->r[i].x;
356 <            
357 <  
360 >      current_frame->Hmat[2][1] = atof( foo );
361 >
362        foo = strtok(NULL, " ,;\t");
363        if(foo == NULL){
364 <        printf("error in reading file\n");
364 >        printf("error in reading file h02\n");
365 >        exit(8);
366 >      }
367 >      current_frame->Hmat[0][2] = atof( foo );
368 >
369 >      foo = strtok(NULL, " ,;\t");
370 >      if(foo == NULL){
371 >        printf("error in reading file h12\n");
372          exit(8);
373        }
374 <      (void)sscanf(foo, "%lf", &current_frame->r[i].y);
364 <      if(current_frame->r[i].y > big_y) big_y = current_frame->r[i].y;
365 <      if(current_frame->r[i].y < small_y) small_y = current_frame->r[i].y;
374 >      current_frame->Hmat[1][2] = atof( foo );
375  
367
376        foo = strtok(NULL, " ,;\t");
377        if(foo == NULL){
378 <        printf("error in reading file\n");
378 >        printf("error in reading file h22\n");
379          exit(8);
380        }
381 +      current_frame->Hmat[2][2] = atof( foo );
382 +
383 +    }
384 +
385 +    for( i=0; i < n_atoms; i++){
386 +      
387 +      eof_test = fgets(read_buffer, sizeof(read_buffer), in_file);
388 +      if(eof_test == NULL){
389 +        printf("error in reading file line at atom %d\n", i);
390 +        exit(8);
391 +      }
392 +
393 +      nTokens = count_tokens(read_buffer, " ,;\t");
394 +
395 +      if (nTokens < 4) {
396 +        printf("Not enough tokens while parsing file at atom %d\n", i);
397 +        exit(8);
398 +      }
399 +
400 +      foo = strtok(read_buffer, " ,;\t");
401 +      (void)strcpy(current_frame->r[i].name, foo); /*copy the atom name */
402 +
403 +      foo = strtok(NULL, " ,;\t");
404 +      (void)sscanf(foo, "%lf",&current_frame->r[i].x);
405 +      foo = strtok(NULL, " ,;\t");
406 +      (void)sscanf(foo, "%lf", &current_frame->r[i].y);
407 +      foo = strtok(NULL, " ,;\t");
408        (void)sscanf(foo, "%lf", &current_frame->r[i].z);
409 <      if(current_frame->r[i].z > big_z) big_z = current_frame->r[i].z;
410 <      if(current_frame->r[i].z < small_z) small_z = current_frame->r[i].z;
409 >
410 >      if (extremaSet) {
411 >        if(current_frame->r[i].x > big_x) big_x = current_frame->r[i].x;
412 >        if(current_frame->r[i].x < small_x) small_x = current_frame->r[i].x;
413 >        
414 >        if(current_frame->r[i].y > big_y) big_y = current_frame->r[i].y;
415 >        if(current_frame->r[i].y < small_y) small_y = current_frame->r[i].y;
416 >        
417 >        if(current_frame->r[i].z > big_z) big_z = current_frame->r[i].z;
418 >        if(current_frame->r[i].z < small_z) small_z = current_frame->r[i].z;
419 >      } else {
420 >        big_x = current_frame->r[i].x;
421 >        small_x = current_frame->r[i].x;
422 >        
423 >        big_y = current_frame->r[i].y;
424 >        small_y = current_frame->r[i].y;
425 >        
426 >        big_z = current_frame->r[i].z;
427 >        small_z = current_frame->r[i].z;
428  
429 +        extremaSet = 1;
430 +
431 +      }
432 +
433 +      if (nTokens == 5 || nTokens > 7) {
434 +        foo = strtok(NULL, " ,;\t");
435 +        (void)sscanf(foo, "%lf", &current_frame->r[i].charge);
436 +        current_frame->r[i].hasCharge = 1;
437 +      } else {
438 +        current_frame->r[i].hasCharge = 0;
439 +      }
440 +
441 +      
442 +      if (nTokens >= 7) {
443 +        foo = strtok(NULL, " ,;\t");
444 +        (void)sscanf(foo, "%lf", &current_frame->r[i].ux);
445 +        foo = strtok(NULL, " ,;\t");
446 +        (void)sscanf(foo, "%lf", &current_frame->r[i].uy);
447 +        foo = strtok(NULL, " ,;\t");
448 +        (void)sscanf(foo, "%lf", &current_frame->r[i].uz);
449 +        current_frame->r[i].hasVector = 1;
450 +      } else {
451 +        current_frame->r[i].hasVector = 0;
452 +      }
453      }
454      currentCount++;
455      
# Line 401 | Line 477 | int main(argc, argv)
477                          "#include \"pov_header.pov\"\n"
478                          "\n");
479            if( draw_box ){
480 <            dx = current_frame->boxX - temp_frame->boxX;
481 <            dy = current_frame->boxY - temp_frame->boxY;
482 <            dz = current_frame->boxZ - temp_frame->boxZ;
483 <            
484 <            dx /= (double)(n_interpolate + 1);
485 <            dy /= (double)(n_interpolate + 1);
486 <            dz /= (double)(n_interpolate + 1);
487 <            
480 >
481 >            for (j = 0; j < 3; j++) {
482 >              for (k = 0; k < 3; k++) {
483 >                dm[j][k] = current_frame->Hmat[j][k] - temp_frame->Hmat[j][k];
484 >                dm[j][k] /= (double)(n_interpolate + 1);
485 >              }
486 >            }
487 >                            
488              fprintf( out_file,
489 <                     "makePeriodicBox( %lf, %lf, %lf )\n"
489 >                     "makePeriodicBox( %lf, %lf, %lf, %lf, %lf, %lf, %lf, %lf, %lf)\n"
490                       "\n",
491 <                     temp_frame->boxX + dx * (i+1),
492 <                     temp_frame->boxZ + dz * (i+1),
493 <                     temp_frame->boxY + dy * (i+1) );
491 >                     temp_frame->Hmat[0][0] + dm[0][0] * (i+1),
492 >                     temp_frame->Hmat[2][0] + dm[2][0] * (i+1),
493 >                     temp_frame->Hmat[1][0] + dm[1][0] * (i+1),
494 >                     temp_frame->Hmat[0][1] + dm[0][1] * (i+1),
495 >                     temp_frame->Hmat[2][1] + dm[2][1] * (i+1),
496 >                     temp_frame->Hmat[1][1] + dm[1][1] * (i+1),
497 >                     temp_frame->Hmat[0][2] + dm[0][2] * (i+1),
498 >                     temp_frame->Hmat[2][2] + dm[2][2] * (i+1),
499 >                     temp_frame->Hmat[1][2] + dm[1][2] * (i+1) );
500            }
501            
502            
# Line 434 | Line 516 | int main(argc, argv)
516              out_coords[j].x = temp_frame->r[j].x + dx * (i+1);
517              out_coords[j].y = temp_frame->r[j].y + dy * (i+1);
518              out_coords[j].z = temp_frame->r[j].z + dz * (i+1);
519 +
520 +            if (current_frame->r[j].hasVector) {              
521 +              dx = current_frame->r[j].ux - temp_frame->r[j].ux;
522 +              dy = current_frame->r[j].uy - temp_frame->r[j].uy;
523 +              dz = current_frame->r[j].uz - temp_frame->r[j].uz;
524 +              
525 +              dx /= (double)(n_interpolate + 1);
526 +              dy /= (double)(n_interpolate + 1);
527 +              dz /= (double)(n_interpolate + 1);
528 +              
529 +              out_coords[j].hasVector = current_frame->r[j].hasVector;
530 +              out_coords[j].ux = temp_frame->r[j].ux + dx * (i+1);
531 +              out_coords[j].uy = temp_frame->r[j].uy + dy * (i+1);
532 +              out_coords[j].uz = temp_frame->r[j].uz + dz * (i+1);
533 +            }
534 +
535 +            if (current_frame->r[j].hasCharge) {              
536 +              dx = current_frame->r[j].charge - temp_frame->r[j].charge;
537 +              
538 +              dx /= (double)(n_interpolate + 1);
539 +              
540 +              out_coords[j].hasCharge = current_frame->r[j].hasCharge;
541 +              out_coords[j].charge = temp_frame->r[j].charge + dx * (i+1);
542 +            }
543 +
544            }
545            
546            pov_write(out_file, out_coords, n_atoms, draw_hydrogens, draw_bonds,
547 <                    draw_atoms);
547 >                    draw_atoms, draw_vectors);
548            free(out_coords);
549            (void)fclose(out_file);
550          }
# Line 461 | Line 568 | int main(argc, argv)
568        if( draw_box ){
569          
570          fprintf( out_file,
571 <                 "makePeriodicBox( %lf, %lf, %lf )\n"
571 >                 "makePeriodicBox( %lf, %lf, %lf, %lf, %lf, %lf, %lf, %lf, %lf )\n"
572                   "\n",
573 <                 current_frame->boxX,
574 <                 current_frame->boxZ,
575 <                 current_frame->boxY );
573 >                 current_frame->Hmat[0][0],
574 >                 current_frame->Hmat[2][0],
575 >                 current_frame->Hmat[1][0],
576 >                 current_frame->Hmat[0][1],
577 >                 current_frame->Hmat[2][1],
578 >                 current_frame->Hmat[1][1],
579 >                 current_frame->Hmat[0][2],
580 >                 current_frame->Hmat[2][2],
581 >                 current_frame->Hmat[1][2] );
582        }
583        
584        
# Line 478 | Line 591 | int main(argc, argv)
591          out_coords[i].x = current_frame->r[i].x;
592          out_coords[i].y = current_frame->r[i].y;
593          out_coords[i].z = current_frame->r[i].z;
594 +
595 +        if (current_frame->r[i].hasVector) {              
596 +          out_coords[i].hasVector = current_frame->r[i].hasVector;
597 +          out_coords[i].ux = current_frame->r[i].ux;
598 +          out_coords[i].uy = current_frame->r[i].uy;
599 +          out_coords[i].uz = current_frame->r[i].uz;
600 +        }
601 +
602 +        if (current_frame->r[i].hasCharge) {              
603 +          out_coords[i].hasCharge = current_frame->r[i].hasCharge;
604 +          out_coords[i].charge = current_frame->r[i].charge;
605 +        }
606        }
607        pov_write(out_file, out_coords, n_atoms, draw_hydrogens, draw_bonds,
608 <                draw_atoms);
608 >                draw_atoms, draw_vectors);
609        free(out_coords);
610        
611        (void)fclose(out_file);
# Line 565 | Line 690 | int main(argc, argv)
690              "\n"
691              "#declare ATOM_SPHERE_FACTOR = 0.2;\n"
692              "#declare BOND_RADIUS = 0.1;\n"
693 +            "#declare VECTOR_SCALE = 1.0;\n"    
694 +            "#declare STICK_RADIUS = 0.5 * BOND_RADIUS;\n"
695 +            "#declare CONE_RADIUS = 2.0 * STICK_RADIUS;\n"
696 +            "#declare CONE_FRACTION = 0.15;\n"
697              "\n"
698              "// declare camera, light, and system variables\n"
699              "\n"
# Line 582 | Line 711 | int main(argc, argv)
711              "#declare cameraLookY = sysCenterY;\n"
712              "#declare cameraLookZ = sysCenterZ;\n"
713              "\n"
714 +            "#declare rotatePointX = cameraLookX;\n"
715 +            "#declare rotatePointY = cameraLookY;\n"
716 +            "#declare rotatePointZ = cameraLookZ;\n"
717 +            "\n"
718              "#declare cameraX = cameraLookX;\n"
719              "#declare cameraY = cameraLookY;\n"
720              "#declare cameraZ = cameraLookZ - zoom;\n"
# Line 651 | Line 784 | int main(argc, argv)
784              "// declare the periodic box macro\n"
785              "//************************************************************\n"
786              "\n"
787 <            "#macro makePeriodicBox( lengthX, lengthY, lengthZ )\n"
787 >            "#macro makePeriodicBox( bx1, by1, bz1, bx2, by2, bz2, bx3, by3, bz3 )\n"
788              "\n"
789 <            "  #local addX = lengthX / 2.0;\n"
790 <            "  #local addY = lengthY / 2.0;\n"
791 <            "  #local addZ = lengthZ / 2.0;\n"
789 >            "  #local bcx = (bx1 + bx2 + bx3) / 2.0;\n"
790 >            "  #local bcy = (by1 + by2 + by3) / 2.0;\n"
791 >            "  #local bcz = (bz1 + bz2 + bz3) / 2.0;\n"
792              "\n"
793 +            "  #local pAx = boxCenterX - bcx;\n"
794 +            "  #local pAy = boxCenterY - bcy;\n"
795 +            "  #local pAz = boxCenterZ - bcz;\n"
796 +            "  #local pBx = boxCenterX + bx1 - bcx;\n"
797 +            "  #local pBy = boxCenterY + by1 - bcy;\n"
798 +            "  #local pBz = boxCenterZ + bz1 - bcz;\n"
799 +            "  #local pCx = boxCenterX + bx2 - bcx;\n"
800 +            "  #local pCy = boxCenterY + by2 - bcy;\n"
801 +            "  #local pCz = boxCenterZ + bz2 - bcz;\n"
802 +            "  #local pDx = boxCenterX + bx3 - bcx;\n"
803 +            "  #local pDy = boxCenterY + by3 - bcy;\n"
804 +            "  #local pDz = boxCenterZ + bz3 - bcz;\n"
805 +            "  #local pEx = boxCenterX + bx1 + bx2 - bcx;\n"
806 +            "  #local pEy = boxCenterY + by1 + by2 - bcy;\n"
807 +            "  #local pEz = boxCenterZ + bz1 + bz2 - bcz;\n"
808 +            "  #local pFx = boxCenterX + bx1 + bx3 - bcx;\n"
809 +            "  #local pFy = boxCenterY + by1 + by3 - bcy;\n"
810 +            "  #local pFz = boxCenterZ + bz1 + bz3 - bcz;\n"
811 +            "  #local pGx = boxCenterX + bx2 + bx3 - bcx;\n"
812 +            "  #local pGy = boxCenterY + by2 + by3 - bcy;\n"
813 +            "  #local pGz = boxCenterZ + bz2 + bz3 - bcz;\n"
814 +            "  #local pHx = boxCenterX + bx1 + bx2 + bx3 - bcx;\n"
815 +            "  #local pHy = boxCenterY + by1 + by2 + by3 - bcy;\n"
816 +            "  #local pHz = boxCenterZ + bz1 + bz2 + bz3 - bcz;\n"
817 +            "\n"
818 +            "  #if(ROTATE)\n"
819 +            "    #local pAx_new = rotatePointX + A11 * (pAx-rotatePointX) + A12 * (pAy-rotatePointY) + A13 * (pAz-rotatePointZ);\n"
820 +            "    #local pAy_new = rotatePointY + A21 * (pAx-rotatePointX) + A22 * (pAy-rotatePointY) + A23 * (pAz-rotatePointZ);\n"
821 +            "    #local pAz_new = rotatePointZ + A31 * (pAx-rotatePointX) + A32 * (pAy-rotatePointY) + A33 * (pAz-rotatePointZ);\n"
822 +            "\n"
823 +            "    #local pBx_new = rotatePointX + A11 * (pBx-rotatePointX) + A12 * (pBy-rotatePointY) + A13 * (pBz-rotatePointZ);\n"
824 +            "    #local pBy_new = rotatePointY + A21 * (pBx-rotatePointX) + A22 * (pBy-rotatePointY) + A23 * (pBz-rotatePointZ);\n"
825 +            "    #local pBz_new = rotatePointZ + A31 * (pBx-rotatePointX) + A32 * (pBy-rotatePointY) + A33 * (pBz-rotatePointZ);\n"
826 +            "\n"
827 +            "    #local pCx_new = rotatePointX + A11 * (pCx-rotatePointX) + A12 * (pCy-rotatePointY) + A13 * (pCz-rotatePointZ);\n"
828 +            "    #local pCy_new = rotatePointY + A21 * (pCx-rotatePointX) + A22 * (pCy-rotatePointY) + A23 * (pCz-rotatePointZ);\n"
829 +            "    #local pCz_new = rotatePointZ + A31 * (pCx-rotatePointX) + A32 * (pCy-rotatePointY) + A33 * (pCz-rotatePointZ);\n"
830 +            "\n"
831 +            "    #local pDx_new = rotatePointX + A11 * (pDx-rotatePointX) + A12 * (pDy-rotatePointY) + A13 * (pDz-rotatePointZ);\n"
832 +            "    #local pDy_new = rotatePointY + A21 * (pDx-rotatePointX) + A22 * (pDy-rotatePointY) + A23 * (pDz-rotatePointZ);\n"
833 +            "    #local pDz_new = rotatePointZ + A31 * (pDx-rotatePointX) + A32 * (pDy-rotatePointY) + A33 * (pDz-rotatePointZ);\n"
834 +            "\n"
835 +            "    #local pEx_new = rotatePointX + A11 * (pEx-rotatePointX) + A12 * (pEy-rotatePointY) + A13 * (pEz-rotatePointZ);\n"
836 +            "    #local pEy_new = rotatePointY + A21 * (pEx-rotatePointX) + A22 * (pEy-rotatePointY) + A23 * (pEz-rotatePointZ);\n"
837 +            "    #local pEz_new = rotatePointZ + A31 * (pEx-rotatePointX) + A32 * (pEy-rotatePointY) + A33 * (pEz-rotatePointZ);\n"
838 +            "\n"
839 +            "    #local pFx_new = rotatePointX + A11 * (pFx-rotatePointX) + A12 * (pFy-rotatePointY) + A13 * (pFz-rotatePointZ);\n"
840 +            "    #local pFy_new = rotatePointY + A21 * (pFx-rotatePointX) + A22 * (pFy-rotatePointY) + A23 * (pFz-rotatePointZ);\n"
841 +            "    #local pFz_new = rotatePointZ + A31 * (pFx-rotatePointX) + A32 * (pFy-rotatePointY) + A33 * (pFz-rotatePointZ);\n"
842 +            "\n"
843 +            "    #local pGx_new = rotatePointX + A11 * (pGx-rotatePointX) + A12 * (pGy-rotatePointY) + A13 * (pGz-rotatePointZ);\n"
844 +            "    #local pGy_new = rotatePointY + A21 * (pGx-rotatePointX) + A22 * (pGy-rotatePointY) + A23 * (pGz-rotatePointZ);\n"
845 +            "    #local pGz_new = rotatePointZ + A31 * (pGx-rotatePointX) + A32 * (pGy-rotatePointY) + A33 * (pGz-rotatePointZ);\n"
846 +            "\n"
847 +            "    #local pHx_new = rotatePointX + A11 * (pHx-rotatePointX) + A12 * (pHy-rotatePointY) + A13 * (pHz-rotatePointZ);\n"
848 +            "    #local pHy_new = rotatePointY + A21 * (pHx-rotatePointX) + A22 * (pHy-rotatePointY) + A23 * (pHz-rotatePointZ);\n"
849 +            "    #local pHz_new = rotatePointZ + A31 * (pHx-rotatePointX) + A32 * (pHy-rotatePointY) + A33 * (pHz-rotatePointZ);\n"
850 +            "\n"
851 +            "  #else\n"
852 +            "    #local pAx_new = pAx;"
853 +            "    #local pAy_new = pAy;"
854 +            "    #local pAz_new = pAz;"
855 +            "\n"
856 +            "    #local pBx_new = pBx;"
857 +            "    #local pBy_new = pBy;"
858 +            "    #local pBz_new = pBz;"
859 +            "\n"
860 +            "    #local pCx_new = pCx;"
861 +            "    #local pCy_new = pCy;"
862 +            "    #local pCz_new = pCz;"
863 +            "\n"
864 +            "    #local pDx_new = pDx;"
865 +            "    #local pDy_new = pDy;"
866 +            "    #local pDz_new = pDz;"
867 +            "\n"
868 +            "    #local pEx_new = pEx;"
869 +            "    #local pEy_new = pEy;"
870 +            "    #local pEz_new = pEz;"
871 +            "\n"
872 +            "    #local pFx_new = pFx;"
873 +            "    #local pFy_new = pFy;"
874 +            "    #local pFz_new = pFz;"
875 +            "\n"
876 +            "    #local pGx_new = pGx;"
877 +            "    #local pGy_new = pGy;"
878 +            "    #local pGz_new = pGz;"
879 +            "\n"
880 +            "    #local pHx_new = pHx;"
881 +            "    #local pHy_new = pHy;"
882 +            "    #local pHz_new = pHz;"
883 +            "\n"
884 +            "  #end\n"
885 +            "  #local pAx = pAx_new;"
886 +            "  #local pAy = pAy_new;"
887 +            "  #local pAz = pAz_new;"
888 +            "\n"                    
889 +            "  #local pBx = pBx_new;"
890 +            "  #local pBy = pBy_new;"
891 +            "  #local pBz = pBz_new;"
892 +            "\n"                    
893 +            "  #local pCx = pCx_new;"
894 +            "  #local pCy = pCy_new;"
895 +            "  #local pCz = pCz_new;"
896 +            "\n"                    
897 +            "  #local pDx = pDx_new;"
898 +            "  #local pDy = pDy_new;"
899 +            "  #local pDz = pDz_new;"
900 +            "\n"                    
901 +            "  #local pEx = pEx_new;"
902 +            "  #local pEy = pEy_new;"
903 +            "  #local pEz = pEz_new;"
904 +            "\n"                    
905 +            "  #local pFx = pFx_new;"
906 +            "  #local pFy = pFy_new;"
907 +            "  #local pFz = pFz_new;"
908 +            "\n"                    
909 +            "  #local pGx = pGx_new;"
910 +            "  #local pGy = pGy_new;"
911 +            "  #local pGz = pGz_new;"
912 +            "\n"                    
913 +            "  #local pHx = pHx_new;"
914 +            "  #local pHy = pHy_new;"
915 +            "  #local pHz = pHz_new;"
916 +            "\n"
917              "  #local colorR = 0.90;\n"
918              "  #local colorG = 0.91;\n"
919              "  #local colorB = 0.98;\n"
# Line 665 | Line 922 | int main(argc, argv)
922              "\n"
923              "  // 1\n"
924              "  cylinder{\n"
925 <            "    < boxCenterX-addX, boxCenterY-addY, boxCenterZ-addZ >,\n"
926 <            "    < boxCenterX-addX, boxCenterY+addY, boxCenterZ-addZ >,\n"
925 >            "    < pAx, pAy, pAz >,\n"
926 >            "    < pBx, pBy, pBz >,\n"
927              "    pipeWidth\n"
928              "    texture{\n"
929              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 682 | Line 939 | int main(argc, argv)
939              "\n"
940              "  // 2\n"
941              "  cylinder{\n"
942 <            "    < boxCenterX-addX, boxCenterY-addY, boxCenterZ+addZ >,\n"
943 <            "    < boxCenterX-addX, boxCenterY+addY, boxCenterZ+addZ >,\n"
942 >            "    < pAx, pAy, pAz >,\n"
943 >            "    < pCx, pCy, pCz >,\n"
944              "    pipeWidth\n"
945              "    texture{\n"
946              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 699 | Line 956 | int main(argc, argv)
956              "\n"
957              "  // 3\n"
958              "  cylinder{\n"
959 <            "    < boxCenterX+addX, boxCenterY-addY, boxCenterZ-addZ >,\n"
960 <            "    < boxCenterX+addX, boxCenterY+addY, boxCenterZ-addZ >,\n"
959 >            "    < pAx, pAy, pAz >,\n"
960 >            "    < pDx, pDy, pDz >,\n"
961              "    pipeWidth\n"
962              "    texture{\n"
963              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 716 | Line 973 | int main(argc, argv)
973              "\n"
974              "  // 4\n"
975              "  cylinder{\n"
976 <            "    < boxCenterX+addX, boxCenterY-addY, boxCenterZ+addZ >,\n"
977 <            "    < boxCenterX+addX, boxCenterY+addY, boxCenterZ+addZ >,\n"
976 >            "    < pBx, pBy, pBz >,\n"
977 >            "    < pEx, pEy, pEz >,\n"
978              "    pipeWidth\n"
979              "    texture{\n"
980              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 733 | Line 990 | int main(argc, argv)
990              "\n"
991              "  // 5\n"
992              "  cylinder{\n"
993 <            "    < boxCenterX-addX, boxCenterY-addY, boxCenterZ-addZ >,\n"
994 <            "    < boxCenterX-addX, boxCenterY-addY, boxCenterZ+addZ >,\n"
993 >            "    < pCx, pCy, pCz >,\n"
994 >            "    < pEx, pEy, pEz >,\n"
995              "    pipeWidth\n"
996              "    texture{\n"
997              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 750 | Line 1007 | int main(argc, argv)
1007              "\n"
1008              "  // 6\n"
1009              "  cylinder{\n"
1010 <            "    < boxCenterX-addX, boxCenterY-addY, boxCenterZ+addZ >,\n"
1011 <            "    < boxCenterX+addX, boxCenterY-addY, boxCenterZ+addZ >,\n"
1010 >            "    < pBx, pBy, pBz >,\n"
1011 >            "    < pFx, pFy, pFz >,\n"
1012              "    pipeWidth\n"
1013              "    texture{\n"
1014              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 767 | Line 1024 | int main(argc, argv)
1024              "\n"
1025              "  // 7\n"
1026              "  cylinder{\n"
1027 <            "    < boxCenterX+addX, boxCenterY-addY, boxCenterZ+addZ >,\n"
1028 <            "    < boxCenterX+addX, boxCenterY-addY, boxCenterZ-addZ >,\n"
1027 >            "    < pCx, pCy, pCz >,\n"
1028 >            "    < pGx, pGy, pGz >,\n"
1029              "    pipeWidth\n"
1030              "    texture{\n"
1031              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 784 | Line 1041 | int main(argc, argv)
1041              "\n"
1042              "  // 8\n"
1043              "  cylinder{\n"
1044 <            "    < boxCenterX+addX, boxCenterY-addY, boxCenterZ-addZ >,\n"
1045 <            "    < boxCenterX-addX, boxCenterY-addY, boxCenterZ-addZ >,\n"
1044 >            "    < pDx, pDy, pDz >,\n"
1045 >            "    < pGx, pGy, pGz >,\n"
1046              "    pipeWidth\n"
1047              "    texture{\n"
1048              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 801 | Line 1058 | int main(argc, argv)
1058              "\n"
1059              "  // 9\n"
1060              "  cylinder{\n"
1061 <            "    < boxCenterX-addX, boxCenterY+addY, boxCenterZ-addZ >,\n"
1062 <            "    < boxCenterX-addX, boxCenterY+addY, boxCenterZ+addZ >,\n"
1061 >            "    < pDx, pDy, pDz >,\n"
1062 >            "    < pFx, pFy, pFz >,\n"
1063              "    pipeWidth\n"
1064              "    texture{\n"
1065              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 818 | Line 1075 | int main(argc, argv)
1075              "\n"
1076              "  // 10\n"
1077              "  cylinder{\n"
1078 <            "    < boxCenterX-addX, boxCenterY+addY, boxCenterZ+addZ >,\n"
1079 <            "    < boxCenterX+addX, boxCenterY+addY, boxCenterZ+addZ >,\n"
1078 >            "    < pEx, pEy, pEz >,\n"
1079 >            "    < pHx, pHy, pHz >,\n"
1080              "    pipeWidth\n"
1081              "    texture{\n"
1082              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 835 | Line 1092 | int main(argc, argv)
1092              "\n"
1093              "  // 11\n"
1094              "  cylinder{\n"
1095 <            "    < boxCenterX+addX, boxCenterY+addY, boxCenterZ+addZ >,\n"
1096 <            "    < boxCenterX+addX, boxCenterY+addY, boxCenterZ-addZ >,\n"
1095 >            "    < pFx, pFy, pFz >,\n"
1096 >            "    < pHx, pHy, pHz >,\n"
1097              "    pipeWidth\n"
1098              "    texture{\n"
1099              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 852 | Line 1109 | int main(argc, argv)
1109              "\n"
1110              "  // 12\n"
1111              "  cylinder{\n"
1112 <            "    < boxCenterX+addX, boxCenterY+addY, boxCenterZ-addZ >,\n"
1113 <            "    < boxCenterX-addX, boxCenterY+addY, boxCenterZ-addZ >,\n"
1112 >            "    < pGx, pGy, pGz >,\n"
1113 >            "    < pHx, pHy, pHz >,\n"
1114              "    pipeWidth\n"
1115              "    texture{\n"
1116              "      pigment{ rgb < colorR, colorG, colorB > }\n"
# Line 901 | Line 1158 | void usage(){
1158                  "   -h            draw hydrogens\n"
1159                  "   -b            draw bonds\n"
1160                  "   -a            draw atoms\n"
1161 +                "   -v            draw vectors\n"
1162                  "   -p            draw periodic box\n"
1163                  "   -r            regenerate bond\n"
1164                  "   -f <#>        render frame <#> only\n"
# Line 910 | Line 1168 | void usage(){
1168                  program_name);
1169    exit(8);
1170   }
1171 +
1172 + int count_tokens(line, delimiters)
1173 +     /* PURPOSE: RETURN A COUNT OF THE NUMBER OF TOKENS ON THE LINE. */
1174 +     char *line;                /* LINE CONTAINING TOKENS. */
1175 +     char *delimiters;  /* POSSIBLE TOKEN DELIMITERS TO USE. */
1176 + {
1177 +  char *working_line;   /* WORKING COPY OF LINE. */
1178 +  int ntokens;          /* NUMBER OF TOKENS FOUND IN LINE. */
1179 +  char *strtok_ptr;     /* POINTER FOR STRTOK. */
1180 +  
1181 +  strtok_ptr= working_line= strdup(line);
1182 +  
1183 +  ntokens=0;
1184 +  while (strtok(strtok_ptr,delimiters)!=NULL)
1185 +    {
1186 +      ntokens++;
1187 +      strtok_ptr=NULL;
1188 +    }
1189 +  
1190 +  free(working_line);
1191 +  return(ntokens);
1192 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines