37 CDart* CExtractionImage::oneSameNeighboorFc(
const CVertex & AVertex,
38 CDart* d1, CDart* fo1, CDart* fo2,
int fusionCase )
43 CDart *d2,*d3,*d4, *t1, *t2, *t3, *t4, *t5, *t6;
44 CDart *g1,*g2,*g3, *c1,*c2,*c3;
48 d2=(FMap->alpha01(d1));
49 d3=(FMap->alpha01(d2));
50 d4=(FMap->alpha01(d3));
51 CDart* newF=createFaceForExtract3d(AVertex);
52 FMap->unsew1(FMap->alpha0(d2));
58 t2=FMap->alpha21(fo1);
59 t3=FMap->alpha021(fo1);
60 t4=FMap->alpha01(fo1);
73 FMap->linkAlpha1(FMap->alpha0(g1),g2);
74 FMap->linkAlpha1(FMap->alpha0(g2),g3);
76 FMap->topoSew3(t1,g1);
85 FMap->delMapDart(FMap->alpha0(t6));
88 FMap->delMapDart(FMap->alpha0(fo1));
89 FMap->delMapDart(fo1);
91 FMap->delMapDart(FMap->alpha0(t5));
96 tmp2=createFaceForExtract3d();
100 FMap->sew3(tmp2,FMap->alpha0(fo1));
102 g1=FMap->alpha01(tmp2);
103 g2=FMap->alpha01(g1);
104 g3=FMap->alpha01(g2);
108 if ( fusionCase & 2 )
110 t1=FMap->alpha1(fo2);
111 t2=FMap->alpha21(fo2);
112 t3=FMap->alpha021(fo2);
113 t4=FMap->alpha01(fo2);
115 t6=FMap->alpha2(fo2);
126 FMap->linkAlpha1(FMap->alpha0(c1),c2);
127 FMap->linkAlpha1(FMap->alpha0(c2),c3);
129 FMap->topoSew3(c1,t1);
137 FMap->delMapDart(FMap->alpha0(t6));
138 FMap->delMapDart(t6);
140 FMap->delMapDart(FMap->alpha0(fo2));
141 FMap->delMapDart(fo2);
143 FMap->delMapDart(FMap->alpha0(t5));
144 FMap->delMapDart(t5);
149 tmp3=createFaceForExtract3d();
155 FMap->sew3(FMap->alpha0(tmp3),fo2);
156 c1=FMap->alpha01(tmp3);
157 c2=FMap->alpha01(c1);
158 c3=FMap->alpha01(c2);
163 FMap->topoSew2(FMap->alpha0(g1),c3);
164 FMap->topoSew2(c1,FMap->alpha1(d3));
165 FMap->topoSew2(FMap->alpha01(d3),FMap->alpha1(d4));
166 FMap->sew2(FMap->alpha0(d1),g3);
168 FMap->topoSew2(g2,FMap->alpha010(newF));
169 FMap->topoSew2(c2,FMap->alpha101(newF));
170 FMap->topoSew2(FMap->alpha0101(d3),FMap->alpha1(newF));
171 FMap->topoSew2(FMap->alpha101(d4),newF);
173 FMap->delMapDart(FMap->alpha0(d2));
174 FMap->delMapDart(d2);
183 void CExtractionImage::precodeFc1( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex )
185 #ifdef DEBUG_EXTRACT_IMAGE
186 cout<<
"CExtractionImage::precodeFc1...";cout.flush();
189 last = FMap->alpha101(oneSameNeighboorFc( AVertex, FMap->alpha010(last), FMap->alpha010(up), FMap->alpha101(behind), 2 ));
191 #ifdef DEBUG_EXTRACT_IMAGE
197 void CExtractionImage::precodeFc4( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex )
199 #ifdef DEBUG_EXTRACT_IMAGE
200 cout<<
"CExtractionImage::precodeFc4...";cout.flush();
203 last = FMap->alpha101(oneSameNeighboorFc( AVertex, FMap->alpha010(last), FMap->alpha010(up), FMap->alpha101(behind), 1 ));
205 #ifdef DEBUG_EXTRACT_IMAGE
211 void CExtractionImage::precodeFc7( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex )
213 #ifdef DEBUG_EXTRACT_IMAGE
214 cout<<
"CExtractionImage::precodeFc7...";cout.flush();
217 last= FMap->alpha101(oneSameNeighboorFc( AVertex, FMap->alpha010(last), FMap->alpha010(up), FMap->alpha101(behind), 3 ));
219 #ifdef DEBUG_EXTRACT_IMAGE
227 void CExtractionImage::precodeFc2( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex)
229 #ifdef DEBUG_EXTRACT_IMAGE
230 cout<<
"CExtractionImage::precodeFc2...";cout.flush();
233 last = FMap->alpha201(oneSameNeighboorFc( AVertex, FMap->alpha101(up), FMap->alpha010(behind), FMap->alpha010(last), 2 ));
235 #ifdef DEBUG_EXTRACT_IMAGE
241 void CExtractionImage::precodeFc5( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex )
243 #ifdef DEBUG_EXTRACT_IMAGE
244 cout<<
"CExtractionImage::precodeFc5...";cout.flush();
247 last = FMap->alpha201(oneSameNeighboorFc( AVertex, FMap->alpha101(up), FMap->alpha010(behind), FMap->alpha010(last), 1));
249 #ifdef DEBUG_EXTRACT_IMAGE
255 void CExtractionImage::precodeFc8( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex )
257 #ifdef DEBUG_EXTRACT_IMAGE
258 cout<<
"CExtractionImage::precodeFc8...";cout.flush();
261 last = FMap->alpha201(oneSameNeighboorFc( AVertex, FMap->alpha101(up), FMap->alpha010(behind), FMap->alpha010(last), 3));
263 #ifdef DEBUG_EXTRACT_IMAGE
271 void CExtractionImage::precodeFc3( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex )
273 #ifdef DEBUG_EXTRACT_IMAGE
274 cout<<
"CExtractionImage::precodeFc3...";cout.flush();
277 last = FMap->alpha12101(oneSameNeighboorFc( AVertex, FMap->alpha101(behind), FMap->alpha0(last), FMap->alpha101(up), 2 ));
279 #ifdef DEBUG_EXTRACT_IMAGE
285 void CExtractionImage::precodeFc6( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex )
287 #ifdef DEBUG_EXTRACT_IMAGE
288 cout<<
"CExtractionImage::precodeFc6...";cout.flush();
291 last = FMap->alpha12101(oneSameNeighboorFc( AVertex, FMap->alpha101(behind), FMap->alpha0(last), FMap->alpha101(up), 1 ));
293 #ifdef DEBUG_EXTRACT_IMAGE
299 void CExtractionImage::precodeFc9( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex)
301 #ifdef DEBUG_EXTRACT_IMAGE
302 cout<<
"CExtractionImage::precodeFc9...";cout.flush();
305 last = FMap->alpha12101(oneSameNeighboorFc( AVertex, FMap->alpha101(behind), FMap->alpha0(last), FMap->alpha101(up), 3 ));
307 #ifdef DEBUG_EXTRACT_IMAGE
315 CDart* CExtractionImage::twoSameNeighboorFc1(
const CVertex & AVertex, CDart* d1, CDart* d5, CDart* fo )
318 CDart *d2,*d3,*d4,*d6,*d7,*d8, *t1, *t2, *t3, *t4, *t5, *t6;
323 d2=FMap->alpha01(d1);
324 d3=FMap->alpha01(d2);
325 d4=FMap->alpha01(d3);
326 d6=FMap->alpha01(d5);
327 d7=FMap->alpha01(d6);
328 d8=FMap->alpha01(d7);
330 tmp3=FMap->alpha2(d6);
332 if (FMap->alpha2(d1) != FMap->alpha0(d5))
334 s1 = FMap->alpha2(d1);
335 s2 = FMap->alpha02(d5);
342 t2=FMap->alpha21(fo);
343 t3=FMap->alpha021(fo);
344 t4=FMap->alpha01(fo);
357 FMap->linkAlpha1(FMap->alpha0(g1),g2);
358 FMap->linkAlpha1(FMap->alpha0(g2),g3);
360 FMap->topoSew3(t1,g1);
362 FMap->unsew1(FMap->alpha0(d1));
364 FMap->unsew1(FMap->alpha0(d5));
375 FMap->delMapDart(FMap->alpha0(t6));
376 FMap->delMapDart((t6));
378 FMap->delMapDart(FMap->alpha0(fo));
379 FMap->delMapDart(fo);
381 FMap->delMapDart(FMap->alpha0(t5));
382 FMap->delMapDart(t5);
388 FMap->delMapDart(FMap->alpha0(d1));
389 FMap->delMapDart(d1);
391 FMap->delMapDart(FMap->alpha0(d5));
392 FMap->delMapDart(d5);
394 FMap->delMapDart(FMap->alpha0(d6));
395 FMap->delMapDart(d6);
397 FMap->topoSew2(g2,FMap->alpha1(d7));
398 FMap->sew2(FMap->alpha0(d4),g3);
399 FMap->topoSew2(FMap->alpha01(d7),FMap->alpha1(d8));
400 FMap->topoSew2(FMap->alpha01(d4),FMap->alpha101(d7));
401 FMap->topoSew2(FMap->alpha1(d3),FMap->alpha0101(d8));
403 FMap->topoSew2(tmp3,g1);
405 FMap->setVertex(FMap->alpha010(d7),
new CAttributeVertex(AVertex.getX()*
STEP3D_X,
414 CDart* CExtractionImage::twoSameNeighboorFc2(
const CVertex & AVertex, CDart* d1, CDart* d5, CDart* fo )
416 CDart *d2,*d3,*d4,*d6,*d7,*d8, *t1, *t2, *t3, *t4, *t5, *t6;
419 CDart *s1, *s2, *fob;
421 d2 = FMap->alpha01(d1);
422 d3 = FMap->alpha01(d2);
423 d4 = FMap->alpha01(d3);
424 d6 = FMap->alpha01(d5);
425 d7 = FMap->alpha01(d6);
426 d8 = FMap->alpha01(d7);
428 tmp3=FMap->alpha2(d4);
430 if (FMap->alpha2(d1) != FMap->alpha0(d5))
432 s1 = FMap->alpha2(d1);
433 s2 = FMap->alpha02(d5);
440 t2 = FMap->alpha121(fo);
441 t3 = FMap->alpha1021(fo);
442 t4 = FMap->alpha101(fo);
443 t5 = FMap->alpha2(d6);
444 t6 = FMap->alpha12(fo);
445 fob = FMap->alpha1(fo);
456 FMap->linkAlpha1(FMap->alpha0(c1),c2);
457 FMap->linkAlpha1(FMap->alpha0(c2),c3);
461 FMap->unsew1(FMap->alpha0(d1));
463 FMap->unsew1(FMap->alpha0(d5));
475 FMap->delMapDart(FMap->alpha0(t6));
476 FMap->delMapDart(t6);
477 FMap->delMapDart(FMap->alpha0(fob));
478 FMap->delMapDart(fob);
479 FMap->delMapDart(FMap->alpha0(t5));
480 FMap->delMapDart(t5);
486 FMap->delMapDart(FMap->alpha0(d1));
487 FMap->delMapDart(d1);
488 FMap->delMapDart(FMap->alpha0(d5));
489 FMap->delMapDart(d5);
490 FMap->delMapDart(FMap->alpha0(d6));
491 FMap->delMapDart(d6);
493 FMap->topoSew2(c3,FMap->alpha10(d7));
495 FMap->topoSew2(FMap->alpha01(d7),FMap->alpha1(d8));
496 FMap->topoSew2(FMap->alpha01(d4),FMap->alpha101(d7));
497 FMap->topoSew2(FMap->alpha1(d3),FMap->alpha01(d2));
498 FMap->topoSew2(tmp3,FMap->alpha0(c1));
500 FMap->setVertex(FMap->alpha010(d7),
new CAttributeVertex(AVertex.getX()*
STEP3D_X,
508 CDart* CExtractionImage::twoSameNeighboorFc3(
const CVertex & AVertex, CDart* d1, CDart* d5, CDart* fo )
510 CDart *d2,*d3,*d4,*d6,*d7,*d8, *t1, *t2, *t3, *t4, *t5, *t6;
512 CDart *tmp3, *tmp4, *fob, *fot, *fo1, *fo0;
515 d2 = FMap->alpha01(d1);
516 d3 = FMap->alpha01(d2);
517 d4 = FMap->alpha01(d3);
518 d6 = FMap->alpha01(d5);
519 d7 = FMap->alpha01(d6);
520 d8 = FMap->alpha01(d7);
522 tmp3=FMap->alpha2(d6);
523 tmp4=FMap->alpha2(d4);
525 fob=FMap->alpha2(fo);
526 fot=FMap->alpha12(fo);
527 fo1=FMap->alpha1(fo);
530 if (FMap->alpha2(d1) != FMap->alpha0(d5))
532 s1 = FMap->alpha2(d1);
533 s2 = FMap->alpha02(d5);
539 t3=FMap->alpha021(fo);
540 t4=FMap->alpha01(fo);
541 t5=FMap->alpha101(fo);
542 t6=FMap->alpha1021(fo);
543 t1=FMap->alpha121(fo);
547 t1=FMap->alpha121(fo);
548 t2=FMap->alpha21(fo);
563 FMap->linkAlpha1(FMap->alpha0(g1),g2);
565 FMap->topoSew3(t4,g1);
567 FMap->unsew1(FMap->alpha0(d1));
569 FMap->unsew1(FMap->alpha0(d5));
581 FMap->delMapDart(FMap->alpha0(fo0));
582 FMap->delMapDart(fo0);
584 FMap->delMapDart(FMap->alpha0(fo1));
585 FMap->delMapDart(fo1);
587 FMap->delMapDart(FMap->alpha0(tmp4));
588 FMap->delMapDart(tmp4);
590 FMap->delMapDart(FMap->alpha0(tmp3));
591 FMap->delMapDart(tmp3);
597 FMap->delMapDart(FMap->alpha0(d1));
598 FMap->delMapDart(d1);
600 FMap->delMapDart(FMap->alpha0(d5));
601 FMap->delMapDart(d5);
603 FMap->delMapDart(FMap->alpha0(d6));
604 FMap->delMapDart(d6);
606 FMap->delMapDart(FMap->alpha0(fob));
607 FMap->delMapDart(fob);
609 FMap->delMapDart(FMap->alpha0(fot));
610 FMap->delMapDart(fot);
612 FMap->topoSew2(g2,FMap->alpha10(d7));
614 FMap->topoSew2(FMap->alpha01(d7),FMap->alpha1(d8));
615 FMap->topoSew2(FMap->alpha01(d4),FMap->alpha101(d7));
616 FMap->topoSew2(FMap->alpha1(d3),FMap->alpha0101(d8));
618 FMap->setVertex(FMap->alpha010(d7),
new CAttributeVertex(AVertex.getX()*
STEP3D_X,
627 void CExtractionImage::precodeFc10( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex )
629 #ifdef DEBUG_EXTRACT_IMAGE
630 cout<<
"CExtractionImage::precodeFc10...";cout.flush();
633 last = FMap->alpha0(twoSameNeighboorFc2( AVertex, FMap->alpha0(last), FMap->alpha101(behind), FMap->alpha010(up) ));
635 #ifdef DEBUG_EXTRACT_IMAGE
641 void CExtractionImage::precodeFc13( CDart* &last, CDart* up, CDart* behind,
const CVertex & AVertex )
643 #ifdef DEBUG_EXTRACT_IMAGE
644 cout<<
"CExtractionImage::precodeFc13...";cout.flush();
647 last = FMap->alpha0(twoSameNeighboorFc1( AVertex, FMap->alpha0(last), FMap->alpha101(behind), FMap->alpha010(up) ));
649 #ifdef DEBUG_EXTRACT_IMAGE
655 void CExtractionImage::precodeFc16( CDart* &last, CDart* up, CDart* behind,
const CVertex &AVertex )
657 #ifdef DEBUG_EXTRACT_IMAGE
658 cout<<
"CExtractionImage::precodeFc16...";cout.flush();
661 last = FMap->alpha0(twoSameNeighboorFc3( AVertex, FMap->alpha0(last), FMap->alpha101(behind), FMap->alpha010(up) ));
663 #ifdef DEBUG_EXTRACT_IMAGE
671 void CExtractionImage::precodeFc11( CDart* &last, CDart* up, CDart* behind,
const CVertex &AVertex )
673 #ifdef DEBUG_EXTRACT_IMAGE
674 cout<<
"CExtractionImage::precodeFc11...";cout.flush();
677 last = FMap->alpha10121(twoSameNeighboorFc2( AVertex, FMap->alpha010(up), FMap->alpha010(last), FMap->alpha010(behind) ));
679 #ifdef DEBUG_EXTRACT_IMAGE
685 void CExtractionImage::precodeFc14( CDart* &last, CDart* up, CDart* behind,
const CVertex &AVertex )
687 #ifdef DEBUG_EXTRACT_IMAGE
688 cout<<
"CExtractionImage::precodeFc14...";cout.flush();
691 last = FMap->alpha10121(twoSameNeighboorFc1( AVertex, FMap->alpha010(up), FMap->alpha010(last), FMap->alpha010(behind) ));
693 #ifdef DEBUG_EXTRACT_IMAGE
699 void CExtractionImage::precodeFc17( CDart* &last, CDart* up, CDart* behind,
const CVertex &AVertex )
701 #ifdef DEBUG_EXTRACT_IMAGE
702 cout<<
"CExtractionImage::precodeFc17...";cout.flush();
705 last = FMap->alpha10121(twoSameNeighboorFc3( AVertex, FMap->alpha010(up), FMap->alpha010(last), FMap->alpha010(behind) ));
707 #ifdef DEBUG_EXTRACT_IMAGE
715 void CExtractionImage::precodeFc12( CDart* &last, CDart* up, CDart* behind,
const CVertex &AVertex )
717 #ifdef DEBUG_EXTRACT_IMAGE
718 cout<<
"CExtractionImage::precodeFc12...";cout.flush();
721 last = FMap->alpha0102101(twoSameNeighboorFc2( AVertex, FMap->alpha010(behind), FMap->alpha101(up), FMap->alpha0(last) ));
723 #ifdef DEBUG_EXTRACT_IMAGE
730 void CExtractionImage::precodeFc15( CDart* &last, CDart* up, CDart* behind,
const CVertex &AVertex )
732 #ifdef DEBUG_EXTRACT_IMAGE
733 cout<<
"CExtractionImage::precodeFc15...";cout.flush();
736 last = FMap->alpha0102101(twoSameNeighboorFc1( AVertex, FMap->alpha010(behind), FMap->alpha101(up), FMap->alpha0(last) ));
738 #ifdef DEBUG_EXTRACT_IMAGE
744 void CExtractionImage::precodeFc18( CDart* &last, CDart* up, CDart* behind,
const CVertex &AVertex )
746 #ifdef DEBUG_EXTRACT_IMAGE
747 cout<<
"CExtractionImage::precodeFc18...";cout.flush();
750 last = FMap->alpha0102101(twoSameNeighboorFc3( AVertex, FMap->alpha010(behind), FMap->alpha101(up), FMap->alpha0(last) ));
752 #ifdef DEBUG_EXTRACT_IMAGE
759 void CExtractionImage::subcasePrecodeFc1 ( CImage3d & image,
760 unsigned int x,
unsigned int y,
761 CDart* &last, CDart* up, CDart* behind,
762 int level,
const CVertex & AVertex,
int FictiveMark,
763 bool keepFictiveEdges,
bool shiftFictiveEdges )
765 precodeFc1(last,up,behind,AVertex);
769 void CExtractionImage::subcasePrecodeFc2 ( CImage3d & image,
770 unsigned int x,
unsigned int y,
771 CDart* &last, CDart* up, CDart* behind,
772 int level,
const CVertex & AVertex,
int FictiveMark,
773 bool keepFictiveEdges,
bool shiftFictiveEdges )
775 precodeFc2(last,up,behind,AVertex);
779 void CExtractionImage::subcasePrecodeFc3 ( CImage3d & image,
780 unsigned int x,
unsigned int y,
781 CDart* &last, CDart* up, CDart* behind,
782 int level,
const CVertex & AVertex,
int FictiveMark,
783 bool keepFictiveEdges,
bool shiftFictiveEdges )
785 precodeFc3(last,up,behind,AVertex);
789 void CExtractionImage::subcasePrecodeFc4 ( CImage3d & image,
790 unsigned int x,
unsigned int y,
791 CDart* &last, CDart* up, CDart* behind,
792 int level,
const CVertex & AVertex,
int FictiveMark,
793 bool keepFictiveEdges,
bool shiftFictiveEdges )
795 precodeFc4(last,up,behind,AVertex);
799 void CExtractionImage::subcasePrecodeFc5 ( CImage3d & image,
800 unsigned int x,
unsigned int y,
801 CDart* &last, CDart* up, CDart* behind,
802 int level,
const CVertex & AVertex,
int FictiveMark,
803 bool keepFictiveEdges,
bool shiftFictiveEdges )
805 precodeFc5(last,up,behind,AVertex);
809 void CExtractionImage::subcasePrecodeFc6 ( CImage3d & image,
810 unsigned int x,
unsigned int y,
811 CDart* &last, CDart* up, CDart* behind,
812 int level,
const CVertex & AVertex,
int FictiveMark,
813 bool keepFictiveEdges,
bool shiftFictiveEdges )
815 precodeFc6(last,up,behind,AVertex);
819 void CExtractionImage::subcasePrecodeFc7 ( CImage3d & image,
820 unsigned int x,
unsigned int y,
821 CDart* &last, CDart* up, CDart* behind,
822 int level,
const CVertex & AVertex,
int FictiveMark,
823 bool keepFictiveEdges,
bool shiftFictiveEdges )
826 precodeFc7(last,up,behind,AVertex);
829 if ( image.sameVoxelUpbehindLeft(x,y) )
830 subcasePrecodesF1F4F7F10(image,x,y,last,up,behind,level,AVertex,
831 FictiveMark,keepFictiveEdges, shiftFictiveEdges);
833 precodeFc7(last,up,behind,AVertex);
838 void CExtractionImage::subcasePrecodeFc8 ( CImage3d & image,
839 unsigned int x,
unsigned int y,
840 CDart* &last, CDart* up, CDart* behind,
841 int level,
const CVertex & AVertex,
int FictiveMark,
842 bool keepFictiveEdges,
bool shiftFictiveEdges )
845 precodeFc8(last,up,behind,AVertex);
848 if ( image.sameVoxelLeftbehindUp(x,y) )
849 subcasePrecodesF2F5F8F11(image,x,y,last,up,behind,level,AVertex,
850 FictiveMark,keepFictiveEdges, shiftFictiveEdges);
852 precodeFc8(last,up,behind,AVertex);
857 void CExtractionImage::subcasePrecodeFc9 ( CImage3d & image,
858 unsigned int x,
unsigned int y,
859 CDart* &last, CDart* up, CDart* behind,
860 int level,
const CVertex & AVertex,
int FictiveMark,
861 bool keepFictiveEdges,
bool shiftFictiveEdges )
864 precodeFc9(last,up,behind,AVertex);
867 if ( image.sameVoxelLeftupBehind(x,y) )
868 subcasePrecodesF3F6F9F12(image,x,y,last,up,behind,level,AVertex,
869 FictiveMark,keepFictiveEdges, shiftFictiveEdges);
871 precodeFc9(last,up,behind,AVertex);
876 void CExtractionImage::subcasePrecodeFc10( CImage3d & image,
877 unsigned int x,
unsigned int y,
878 CDart* &last, CDart* up, CDart* behind,
879 int level,
const CVertex & AVertex,
int FictiveMark,
880 bool keepFictiveEdges,
bool shiftFictiveEdges )
883 precodeFc10(last,up,behind,AVertex);
886 if ( image.sameVoxelLeftBehind(x,y) &&
887 image.sameVoxelLeftupBehind(x,y) )
888 subcasePrecodesF16F22(image,x,y,last,up,behind,level,AVertex,
889 FictiveMark,keepFictiveEdges, shiftFictiveEdges);
891 precodeFc10(last,up,behind,AVertex);
896 void CExtractionImage::subcasePrecodeFc11( CImage3d & image,
897 unsigned int x,
unsigned int y,
898 CDart* &last, CDart* up, CDart* behind,
899 int level,
const CVertex & AVertex,
int FictiveMark,
900 bool keepFictiveEdges,
bool shiftFictiveEdges )
903 precodeFc11(last,up,behind,AVertex);
906 if ( image.sameVoxelUpLeft(x,y) &&
907 image.sameVoxelUpbehindLeft(x,y) )
908 subcasePrecodesF17F23(image,x,y,last,up,behind,level,AVertex,
909 FictiveMark,keepFictiveEdges, shiftFictiveEdges);
911 precodeFc11(last,up,behind,AVertex);
916 void CExtractionImage::subcasePrecodeFc12( CImage3d & image,
917 unsigned int x,
unsigned int y,
918 CDart* &last, CDart* up, CDart* behind,
919 int level,
const CVertex & AVertex,
int FictiveMark,
920 bool keepFictiveEdges,
bool shiftFictiveEdges )
923 precodeFc12(last,up,behind,AVertex);
926 if ( image.sameVoxelBehindUp(x,y) &&
927 image.sameVoxelLeftbehindUp(x,y) )
928 subcasePrecodesF18F24(image,x,y,last,up,behind,level,AVertex,
929 FictiveMark,keepFictiveEdges, shiftFictiveEdges);
931 precodeFc12(last,up,behind,AVertex);
936 void CExtractionImage::subcasePrecodeFc13( CImage3d & image,
937 unsigned int x,
unsigned int y,
938 CDart* &last, CDart* up, CDart* behind,
939 int level,
const CVertex & AVertex,
int FictiveMark,
940 bool keepFictiveEdges,
bool shiftFictiveEdges )
943 precodeFc13(last,up,behind,AVertex);
946 if ( image.sameVoxelBehindLeft(x,y) &&
947 image.sameVoxelUpbehindLeft(x,y) )
948 subcasePrecodesF13F19(image,x,y,last,up,behind,level,AVertex,
949 FictiveMark,keepFictiveEdges, shiftFictiveEdges);
951 precodeFc13(last,up,behind,AVertex);
956 void CExtractionImage::subcasePrecodeFc14( CImage3d & image,
957 unsigned int x,
unsigned int y,
958 CDart* &last, CDart* up, CDart* behind,
959 int level,
const CVertex & AVertex,
int FictiveMark,
960 bool keepFictiveEdges,
bool shiftFictiveEdges )
963 precodeFc14(last,up,behind,AVertex);
966 if ( image.sameVoxelLeftUp(x,y) &&
967 image.sameVoxelLeftbehindUp(x,y) )
968 subcasePrecodesF14F20(image,x,y,last,up,behind,level,AVertex,
969 FictiveMark,keepFictiveEdges, shiftFictiveEdges);
971 precodeFc14(last,up,behind,AVertex);
976 void CExtractionImage::subcasePrecodeFc15( CImage3d & image,
977 unsigned int x,
unsigned int y,
978 CDart* &last, CDart* up, CDart* behind,
979 int level,
const CVertex & AVertex,
int FictiveMark,
980 bool keepFictiveEdges,
bool shiftFictiveEdges )
983 precodeFc15(last,up,behind,AVertex);
986 if ( image.sameVoxelUpBehind(x,y) &&
987 image.sameVoxelLeftupBehind(x,y) )
988 subcasePrecodesF15F21(image,x,y,last,up,behind,level,AVertex,
989 FictiveMark,keepFictiveEdges, shiftFictiveEdges);
991 precodeFc15(last,up,behind,AVertex);
996 void CExtractionImage::subcasePrecodeFc16( CImage3d & image,
997 unsigned int x,
unsigned int y,
998 CDart* &last, CDart* up, CDart* behind,
999 int level,
const CVertex & AVertex,
int FictiveMark,
1000 bool keepFictiveEdges,
bool shiftFictiveEdges )
1002 if (keepFictiveEdges)
1004 CDart * dart1 = FMap->alpha0121(last);
1005 CDart * dart2 = FMap->alpha012(behind);
1007 if (FMap->isMarked(dart1,FictiveMark))
1009 FMap->shiftAllAdjacentFictiveEdges(FMap->alpha0(dart2),FictiveMark);
1010 precodeFc16(last,up,behind,AVertex);
1012 else if (dart1!=FMap->alpha0(dart2) &&
1013 FMap->isSameOrbit(dart1,dart2,ORBIT_01))
1015 precodeFc13(last,up,behind,AVertex);
1016 FMap->markOrbit(FMap->alpha0121(last),ORBIT_023,FictiveMark);
1019 precodeFc16(last,up,behind,AVertex);
1022 precodeFc16(last,up,behind,AVertex);
1026 void CExtractionImage::subcasePrecodeFc17( CImage3d & image,
1027 unsigned int x,
unsigned int y,
1028 CDart* &last, CDart* up, CDart* behind,
1029 int level,
const CVertex & AVertex,
int FictiveMark,
1030 bool keepFictiveEdges,
bool shiftFictiveEdges )
1032 if (keepFictiveEdges)
1034 CDart * dart1 = FMap->alpha021(last);
1035 CDart * dart2 = FMap->alpha0123(behind);
1037 if (FMap->isMarked(dart1,FictiveMark))
1039 FMap->shiftAllAdjacentFictiveEdges(FMap->alpha1(dart1),FictiveMark);
1040 precodeFc17(last,up,behind,AVertex);
1042 else if (dart1!=FMap->alpha0(dart2) &&
1043 FMap->isSameOrbit(dart1,dart2,ORBIT_01))
1045 CDart *tmp = FMap->alpha2(last);
1046 precodeFc14(last,up,behind,AVertex);
1047 FMap->markOrbit(tmp,ORBIT_023,FictiveMark);
1050 precodeFc17(last,up,behind,AVertex);
1053 precodeFc17(last,up,behind,AVertex);
1057 void CExtractionImage::subcasePrecodeFc18( CImage3d & image,
1058 unsigned int x,
unsigned int y,
1059 CDart* &last, CDart* up, CDart* behind,
1060 int level,
const CVertex & AVertex,
int FictiveMark,
1061 bool keepFictiveEdges,
bool shiftFictiveEdges )
1063 if (keepFictiveEdges)
1065 CDart * dart1 = FMap->alpha012(last);
1067 if (FMap->isMarked(FMap->alpha1(dart1),FictiveMark))
1069 FMap->shiftAllAdjacentFictiveEdges(dart1,FictiveMark);
1070 precodeFc18(last,up,behind,AVertex);
1072 else if (FMap->alpha1(dart1)!=FMap->alpha20(last) &&
1073 FMap->isSameOrbit(dart1,FMap->alpha2(last),ORBIT_01))
1075 precodeFc15(last,up,behind,AVertex);
1076 FMap->markOrbit(dart1,ORBIT_023,FictiveMark);
1079 precodeFc18(last,up,behind,AVertex);
1082 precodeFc18(last,up,behind,AVertex);