ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/mgflib/parser.c
(Generate patch)

Comparing ray/src/cv/mgflib/parser.c (file contents):
Revision 1.2 by greg, Wed Jun 22 15:33:47 1994 UTC vs.
Revision 1.3 by greg, Wed Jun 22 17:15:49 1994 UTC

# Line 517 | Line 517 | char   **av;
517                  return(MG_EARGC);
518          if ((cv = c_getvert(av[1])) == NULL)
519                  return(MG_EUNDEF);
520 <        if (cv->n[0]==0. && cv->n[1]==0. && cv->n[2]==0.)
520 >        if (is0vect(cv->n))
521                  return(MG_EILL);
522          if (!isflt(av[2]) || !isflt(av[3]))
523                  return(MG_ETYPE);
524          minrad = atof(av[2]);
525 +        round0(minrad);
526          maxrad = atof(av[3]);
527                                          /* check orientation */
528          if (minrad > 0.)
# Line 629 | Line 630 | char   **av;
630                  return(MG_EARGC);
631          if ((cv = c_getvert(av[1])) == NULL)
632                  return(MG_EUNDEF);
633 <        if (cv->n[0]==0. && cv->n[1]==0. && cv->n[2]==0.)
633 >        if (is0vect(cv->n))
634                  return(MG_EILL);
635          if (!isflt(av[2]) || !isflt(av[3]))
636                  return(MG_ETYPE);
637          minrad = atof(av[2]);
638 +        round0(minrad);
639          maxrad = atof(av[3]);
640          if (minrad < 0. || maxrad <= minrad)
641                  return(MG_EILL);
# Line 659 | Line 661 | char   **av;
661                                  sprintf(p3[j], FLTFMT, cv->p[j] +
662                                                  maxrad*u[j]*cos(theta) +
663                                                  maxrad*v[j]*sin(theta));
664 <                        if ((rv = handle_it(MG_E_VERTEX, 3, v3ent)) != MG_OK)
664 >                        if ((rv = handle_it(MG_E_VERTEX, 2, v3ent)) != MG_OK)
665                                  return(rv);
666                          if ((rv = handle_it(MG_E_POINT, 4, p3ent)) != MG_OK)
667                                  return(rv);
# Line 685 | Line 687 | char   **av;
687                                  sprintf(p3[j], FLTFMT, cv->p[j] + maxrad*d);
688                                  sprintf(p4[j], FLTFMT, cv->p[j] + minrad*d);
689                          }
690 <                        if ((rv = handle_it(MG_E_VERTEX, 3, v3ent)) != MG_OK)
690 >                        if ((rv = handle_it(MG_E_VERTEX, 2, v3ent)) != MG_OK)
691                                  return(rv);
692                          if ((rv = handle_it(MG_E_POINT, 4, p3ent)) != MG_OK)
693                                  return(rv);
694 <                        if ((rv = handle_it(MG_E_VERTEX, 3, v4ent)) != MG_OK)
694 >                        if ((rv = handle_it(MG_E_VERTEX, 2, v4ent)) != MG_OK)
695                                  return(rv);
696                          if ((rv = handle_it(MG_E_POINT, 4, p4ent)) != MG_OK)
697                                  return(rv);
# Line 734 | Line 736 | char   **av;
736          if (!isflt(av[2]) || !isflt(av[4]))
737                  return(MG_ETYPE);
738          rad1 = atof(av[2]);
739 +        round0(rad1);
740          rad2 = atof(av[4]);
741 +        round0(rad2);
742          if (rad1 == 0.) {
743                  if (rad2 == 0.)
744                          return(MG_EILL);
# Line 758 | Line 762 | char   **av;
762          if ((d = normalize(w)) == 0.)
763                  return(MG_EILL);
764          n1off = n2off = (rad2 - rad1)/d;
765 <        if (warpconends)                /* hack for e_sph and e_torus */
766 <                n2off = tan(atan(n2off)-(PI/4)/mg_nqcdivs);
767 <        n2off = sgn*n2off;
765 >        if (warpconends) {              /* hack for e_sph and e_torus */
766 >                d = atan(n2off) - (PI/4)/mg_nqcdivs;
767 >                if (d <= -PI/2+FTINY)
768 >                        n2off = -FHUGE;
769 >                else
770 >                        n2off = tan(d);
771 >        }
772          make_axes(u, v, w);
773          for (j = 0; j < 3; j++) {
774                  sprintf(p3[j], FLTFMT, cv2->p[j] + rad2*u[j]);
775 <                sprintf(n3[j], FLTFMT, u[j] + w[j]*n2off);
775 >                if (n2off <= -FHUGE)
776 >                        sprintf(n3[j], FLTFMT, -w[j]);
777 >                else
778 >                        sprintf(n3[j], FLTFMT, u[j] + w[j]*n2off);
779          }
780          if ((rv = handle_it(MG_E_VERTEX, 3, v3ent)) != MG_OK)
781                  return(rv);
# Line 787 | Line 798 | char   **av;
798                          for (j = 0; j < 3; j++) {
799                                  d = u[j]*cos(theta) + v[j]*sin(theta);
800                                  sprintf(p3[j], FLTFMT, cv2->p[j] + rad2*d);
801 <                                sprintf(n3[j], FLTFMT, d + w[j]*n2off);
801 >                                if (n2off > -FHUGE)
802 >                                        sprintf(n3[j], FLTFMT, d + w[j]*n2off);
803                          }
804 <                        if ((rv = handle_it(MG_E_VERTEX, 3, v3ent)) != MG_OK)
804 >                        if ((rv = handle_it(MG_E_VERTEX, 2, v3ent)) != MG_OK)
805                                  return(rv);
806                          if ((rv = handle_it(MG_E_POINT, 4, p3ent)) != MG_OK)
807                                  return(rv);
808 <                        if ((rv = handle_it(MG_E_NORMAL, 4, n3ent)) != MG_OK)
808 >                        if (n2off > -FHUGE &&
809 >                        (rv = handle_it(MG_E_NORMAL, 4, n3ent)) != MG_OK)
810                                  return(rv);
811                          if ((rv = handle_it(MG_E_FACE, 4, fent)) != MG_OK)
812                                  return(rv);
813                  }
814          } else {                        /* quads */
815                  v1ent[3] = "_cv4";
816 <                if (warpconends)                /* hack for e_sph and e_torus */
817 <                        n1off = tan(atan(n1off)+(PI/4)/mg_nqcdivs);
818 <                n1off = sgn*n1off;
816 >                if (warpconends) {              /* hack for e_sph and e_torus */
817 >                        d = atan(n1off) + (PI/4)/mg_nqcdivs;
818 >                        if (d >= PI/2-FTINY)
819 >                                n1off = FHUGE;
820 >                        else
821 >                                n1off = tan(atan(n1off)+(PI/4)/mg_nqcdivs);
822 >                }
823                  for (j = 0; j < 3; j++) {
824                          sprintf(p4[j], FLTFMT, cv1->p[j] + rad1*u[j]);
825 <                        sprintf(n4[j], FLTFMT, u[j] + w[j]*n1off);
825 >                        if (n1off >= FHUGE)
826 >                                sprintf(n4[j], FLTFMT, w[j]);
827 >                        else
828 >                                sprintf(n4[j], FLTFMT, u[j] + w[j]*n1off);
829                  }
830                  if ((rv = handle_it(MG_E_VERTEX, 3, v4ent)) != MG_OK)
831                          return(rv);
# Line 822 | Line 842 | char   **av;
842                          for (j = 0; j < 3; j++) {
843                                  d = u[j]*cos(theta) + v[j]*sin(theta);
844                                  sprintf(p3[j], FLTFMT, cv2->p[j] + rad2*d);
845 <                                sprintf(n3[j], FLTFMT, d + w[j]*n2off);
845 >                                if (n2off > -FHUGE)
846 >                                        sprintf(n3[j], FLTFMT, d + w[j]*n2off);
847                                  sprintf(p4[j], FLTFMT, cv1->p[j] + rad1*d);
848 <                                sprintf(n4[j], FLTFMT, d + w[j]*n1off);
848 >                                if (n1off < FHUGE)
849 >                                        sprintf(n4[j], FLTFMT, d + w[j]*n1off);
850                          }
851 <                        if ((rv = handle_it(MG_E_VERTEX, 3, v3ent)) != MG_OK)
851 >                        if ((rv = handle_it(MG_E_VERTEX, 2, v3ent)) != MG_OK)
852                                  return(rv);
853                          if ((rv = handle_it(MG_E_POINT, 4, p3ent)) != MG_OK)
854                                  return(rv);
855 <                        if ((rv = handle_it(MG_E_NORMAL, 4, n3ent)) != MG_OK)
855 >                        if (n2off > -FHUGE &&
856 >                        (rv = handle_it(MG_E_NORMAL, 4, n3ent)) != MG_OK)
857                                  return(rv);
858 <                        if ((rv = handle_it(MG_E_VERTEX, 3, v4ent)) != MG_OK)
858 >                        if ((rv = handle_it(MG_E_VERTEX, 2, v4ent)) != MG_OK)
859                                  return(rv);
860                          if ((rv = handle_it(MG_E_POINT, 4, p4ent)) != MG_OK)
861                                  return(rv);
862 <                        if ((rv = handle_it(MG_E_NORMAL, 4, n4ent)) != MG_OK)
862 >                        if (n1off < FHUGE &&
863 >                        (rv = handle_it(MG_E_NORMAL, 4, n4ent)) != MG_OK)
864                                  return(rv);
865                          if ((rv = handle_it(MG_E_FACE, 5, fent)) != MG_OK)
866                                  return(rv);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines