/[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.21 by jvk, Tue Jun 24 13:26:22 2003 UTC revision 1.22 by jvk, Tue Jun 24 14:30:04 2003 UTC
# Line 363  struct FilletSpan2 { Line 363  struct FilletSpan2 {
363                  DBG(dbg_vfillets) << "P cleave: "<< w1<<" "<<w2<<" "                  DBG(dbg_vfillets) << "P cleave: "<< w1<<" "<<w2<<" "
364                          << ab<<" "<<fract<<" "<<va1<<" "<<va2<<                          << ab<<" "<<fract<<" "<<va1<<" "<<va2<<
365                              "\n";                              "\n";
366                  if (overlap1)                  renderSpan2(node, a1,
367                      renderSpan(CircularSliceSpan(node, a1-w1, a1+w1), 0);                              makeLerpFilletSpan(
368                  else                                                 makeFilletBlend(f1, vf2),
369                      renderSpan(                                                 f1,
370                                 makeLerpFilletSpan(                                                 fract), 1,
371                                                    makeFilletBlend(f1, vf2),                              overlap1);
372                                                    f1,  
373                                                    fract), 1                  renderSpan2(node, a2,
374                                 );                              makeLerpFilletSpan(
375                                                   makeFilletBlend(f2, vf1),
376                  if (overlap2)                                                 f2,
377                      renderSpan(CircularSliceSpan(node, a2-w2, a2+w2), 0);                                                 fract), -1,
378                  else                              overlap2
379                      renderSpan(                              );
                                makeLerpFilletSpan(  
                                                   makeFilletBlend(f2, vf1),  
                                                   f2,  
                                                   fract), -1  
                                );  
380              } else              } else
381                  renderNormalOrBlend(node, f1, f2, overlap1, overlap2);                  renderNormalOrBlend(node, f1, f2, overlap1, overlap2);
382          } else if(flags & 16) { // Ellipses          } else if(flags & 16) { // Ellipses
# Line 483  struct FilletSpan2 { Line 478  struct FilletSpan2 {
478      }      }
479    
480      template<class F> void renderNormalOrBlend(const CircularNode &node, const F &f1, const F &f2, bool overlap1 = false, bool overlap2 = false) const {      template<class F> void renderNormalOrBlend(const CircularNode &node, const F &f1, const F &f2, bool overlap1 = false, bool overlap2 = false) const {
         float a1 = f1.conn.a;  
         float a2 = f2.conn.a;  
         float w1 = normAngle(f1.dirTang.atan() - a1);  
         float w2 = normAngle(a2 - f2.dirTang.atan());  
           
481          if(f1.overlaps(f2)) {          if(f1.overlaps(f2)) {
482              if (overlap1)              renderSpan2(node, f1.conn.a, makeFilletBlend(f1, f2), 1, overlap1);
483                  renderSpan(CircularSliceSpan(node, a1-w1, a1+w1), 0);              renderSpan2(node, f2.conn.a, makeFilletBlend(f2, f1), -1, overlap2);
             else  
                 renderSpan(makeFilletBlend(f1, f2), 1);  
   
             if (overlap2)  
                 renderSpan(CircularSliceSpan(node, a2-w2, a2+w2), 0);  
             else  
                 renderSpan(makeFilletBlend(f2, f1), -1);  
               
484          } else {          } else {
485              if (overlap1)              renderSpan2(node, f1.conn.a, f1, 1, overlap1);
486                  renderSpan(CircularSliceSpan(node, a1-w1, a1+w1), 0);              
             else  
                 renderSpan(f1, 1);  
487              float ta1 = f1.dirTang.atan();              float ta1 = f1.dirTang.atan();
488              float ta2 = f2.dirTang.atan();              float ta2 = f2.dirTang.atan();
489              if(ta2 < ta1) ta2 += 2*M_PI;              if(ta2 < ta1) ta2 += 2*M_PI;
490              renderSpan(CircularNodeSpan(node, ta1, ta2), 1);              renderSpan(CircularNodeSpan(node, ta1, ta2), 1);
491              if (overlap2)  
492                  renderSpan(CircularSliceSpan(node, a2-w2, a2+w2), 0);              renderSpan2(node, f2.conn.a, f2, -1, overlap2);
             else  
                 renderSpan(f2, -1);  
493          }          }
494      }      }
495    
496        template<class F> void renderSpan2(const CircularNode &node, float a0, const F &f, int sign, bool overlap) const {
497            Vec p1 = f.point(1);
498            Vec n = dirVec(a0).cw90();
499            Vec p2 = p1 - node.ctr;
500            p2 = p2 - n.dot(p2) * n + node.ctr;
501            if (flags & 128)
502                renderSpan(CircularSliceSpan(node, p1, p2), 0);
503            if (!overlap) renderSpan(f, sign);
504        }
505    
506  };  };
507  VOB_DEFINED(FilletSpan2);  VOB_DEFINED(FilletSpan2);
508    

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22

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