/[libvob]/libvob/include/vob/vobs/Fillet.hxx
ViewVC logotype

Diff of /libvob/include/vob/vobs/Fillet.hxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.48 by jvk, Sat Jul 5 13:13:03 2003 UTC revision 1.49 by jvk, Thu Jul 10 12:09:36 2003 UTC
# Line 828  struct Fillet3DBlend { Line 828  struct Fillet3DBlend {
828                    
829      }      }
830    
831      void renderCylinder(const std::vector<ZVec> &pt, int n, int m) const {      void renderCylinder(const std::vector<ZVec> &pt, int n, int m,
832                            bool pole0 = false, bool pole1 = false) const {
833          std::vector<ZVec> norm(n * m);          std::vector<ZVec> norm(n * m);
834          int i, j;          int i, j;
835    
836          for (i = 0; i < n; i++) {          ZVec sum(0,0,0);
837            for (j = 0; j < m; j++) {
838                ZVec px0 = pt[0 * m + j];
839                ZVec px1 = pt[1 * m + j];
840                ZVec py0 = pt[pole0 * m + (j==  0 ? m-1 : j-1)];
841                ZVec py1 = pt[pole0 * m + (j==m-1 ? 0 : j+1)];
842                
843                sum += norm[0 * m + j] = (px1 - px0).crossp(py1 - py0).normalized();
844            }
845            if (pole0) {
846                sum = sum.normalized();
847                for (j = 0; j < m; j++) norm[0 * m + j] = sum;
848            }
849    
850            sum = ZVec(0,0,0);
851            for (i = 1; i < n-1; i++) {
852              for (j = 0; j < m; j++) {              for (j = 0; j < m; j++) {
853                  ZVec px0 = pt[(i==  0 ?   0 : i-1) * m + j];                  ZVec px0 = pt[(i-1) * m + j];
854                  ZVec px1 = pt[(i==n-1 ? n-1 : i+1) * m + j];                  ZVec px1 = pt[(i+1) * m + j];
855                  ZVec py0 = pt[i * m + (j==  0 ? m-1 : j-1)];                  ZVec py0 = pt[i * m + (j==  0 ? m-1 : j-1)];
856                  ZVec py1 = pt[i * m + (j==m-1 ?   0 : j+1)];                  ZVec py1 = pt[i * m + (j==m-1 ?   0 : j+1)];
857    
# Line 843  struct Fillet3DBlend { Line 859  struct Fillet3DBlend {
859              }              }
860          }          }
861    
862            for (j = 0; j < m; j++) {
863                ZVec px0 = pt[(n-2) * m + j];
864                ZVec px1 = pt[(n-1) * m + j];
865                ZVec py0 = pt[(n-1-pole1) * m + (j==  0 ? m-1 : j-1)];
866                ZVec py1 = pt[(n-1-pole1) * m + (j==m-1 ?   0 : j+1)];
867    
868                sum += norm[(n - 1) * m + j] = (px1 - px0).crossp(py1 - py0).normalized();
869            }
870            if (pole1) {
871                sum = sum.normalized();
872                for (j = 0; j < m; j++) norm[(n-1) * m + j] = sum;
873            }
874    
875          for (i = 0; i < n - 1; i++) {          for (i = 0; i < n - 1; i++) {
876              glBegin(GL_QUAD_STRIP);              glBegin(GL_QUAD_STRIP);
877              for (j = 0; j < m; j++) {              for (j = 0; j < m; j++) {
# Line 994  struct Fillet3DBlend { Line 1023  struct Fillet3DBlend {
1023                      }                      }
1024                  }                  }
1025    
1026                  renderCylinder(pt, ndice + 1, ndice);                  renderCylinder(pt, ndice + 1, ndice, false, true);
1027              }              }
1028          }          }
1029    
# Line 1022  struct Fillet3DBlend { Line 1051  struct Fillet3DBlend {
1051              for (i = 0; i < (ndice + 1) * (ndice * 2); i++)              for (i = 0; i < (ndice + 1) * (ndice * 2); i++)
1052                  pt[i] = blend(conns, N, r, pt[i]) + p0;                  pt[i] = blend(conns, N, r, pt[i]) + p0;
1053    
1054              renderCylinder(pt, ndice + 1, ndice * 2);              renderCylinder(pt, ndice + 1, ndice * 2, true, true);
1055          } else {          } else {
1056                                    
1057    

Legend:
Removed from v.1.48  
changed lines
  Added in v.1.49

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26