76 #define MemBlkSiz 100000
80 #define MIN(a,b) ((a) < (b) ? (a) : (b))
81 #define MAX(a,b) ((a) > (b) ? (a) : (b))
82 #define POW(a) ((a)*(a))
83 #define CUB(a) ((a)*(a)*(a))
330 static const itg TetEdg[6][2] = { {0,1}, {0,2}, {0,3}, {1,2}, {1,3}, {2,3} };
331 static const itg TetFac[4][3] = { {1,2,3}, {2,0,3}, {3,0,1}, {0,2,1} };
332 static const itg TetFacEdg[4][3] = { {5,4,3}, {2,5,1}, {0,4,2}, {3,1,0} };
333 static const itg tvpe[12][2] = { {3,2}, {0,1}, {4,5}, {7,6}, {3,7}, {2,6},
334 {1,5}, {0,4}, {3,0}, {7,4}, {6,5}, {2,1} };
335 static const itg tvpf[6][4] = { {3,0,4,7}, {5,1,2,6}, {3,2,1,0},
336 {5,6,7,4},{3,7,6,2}, {5,4,0,1} };
353 itg i, j, k, t, EdgIdx, TotItmCnt = 0, MaxItmCnt, idx = 0;
362 if(!
NmbVer || !PtrCrd1 || !PtrCrd2 || (BasIdx < 0) || (BasIdx > 1) )
365 NmbThr =
MAX(NmbThr, 1);
370 tre = calloc(1,
sizeof(
TreSct));
389 MaxItmCnt =
MAX(MaxItmCnt, NmbTri);
395 MaxItmCnt =
MAX(MaxItmCnt, NmbQad);
401 MaxItmCnt =
MAX(MaxItmCnt, NmbTet);
406 for(t=0;t<NmbThr;t++)
408 MshThr = &msh->
thr[t];
410 MshThr->
FlgTab =
NewMem(tre, (MaxItmCnt + 1) *
sizeof(
char) );
411 memset(MshThr->
FlgTab, 0, (MaxItmCnt + 1) *
sizeof(
char));
414 memset(MshThr->
TagTab, 0, (MaxItmCnt + 1) *
sizeof(
itg));
430 for(t=0;t<NmbThr;t++)
432 MshThr = &msh->
thr[t];
433 OctThr = &tre->
thr[t];
586 crd[0] = tre->
bnd[0][0] + tre->
BucSiz / 2.;
588 for(i=0;i<tre->
NmbBuc;i++)
590 crd[1] = tre->
bnd[0][1] + tre->
BucSiz / 2.;
592 for(j=0;j<tre->
NmbBuc;j++)
594 crd[2] = tre->
bnd[0][2] + tre->
BucSiz / 2.;
596 for(k=0;k<tre->
NmbBuc;k++)
600 crd, tre->
bnd[0], tre->
bnd[1]);
615 return((int64_t)tre);
626 size_t MemUse = tre->
MemUse;
629 memset(tre, 0,
sizeof(
TreSct));
640 fpn MinCrd[3],
fpn MaxCrd[3],
itg ThrIdx )
643 fpn box[2][3] = { {MinCrd[0], MinCrd[1], MinCrd[2]},
644 {MaxCrd[0], MaxCrd[1], MaxCrd[2]} };
649 tre->
bnd[0], tre->
bnd[1], ThrIdx );
651 for(i=0;i<NmbItm;i++)
663 fpn MinCrd[3],
fpn MaxCrd[3] )
666 fpn MidCrd[3], OctMin[3], OctMax[3], SonMin[3], SonMax[3];
673 while(oct->
sub && (oct->
lvl < MaxLvl))
677 SonIdx = ((VerCrd[0] < MidCrd[0]) ? 0 : 1)
678 | ((VerCrd[1] < MidCrd[1]) ? 0 : 2)
679 | ((VerCrd[2] < MidCrd[2]) ? 0 : 4);
681 SetSonCrd(SonIdx, SonMin, SonMax, OctMin, OctMax);
684 oct = oct->
son + SonIdx;
704 fpn xmid = (MinCrd[0] + MaxCrd[0])/2.;
705 fpn ymid = (MinCrd[1] + MaxCrd[1])/2.;
706 fpn zmid = (MinCrd[2] + MaxCrd[2])/2.;
708 { {MinCrd[0], MinCrd[1], MinCrd[2]}, {xmid, ymid, zmid} },
709 { {xmid, MinCrd[1], MinCrd[2]}, {MaxCrd[0], ymid, zmid} },
710 { {MinCrd[0], ymid, MinCrd[2]}, {xmid, MaxCrd[1], zmid} },
711 { {xmid, ymid, MinCrd[2]}, {MaxCrd[0], MaxCrd[1], zmid} },
712 { {MinCrd[0], MinCrd[1], zmid}, {xmid, ymid, MaxCrd[2]} },
713 { {xmid, MinCrd[1], zmid}, {MaxCrd[0], ymid, MaxCrd[2]} },
714 { {MinCrd[0], ymid, zmid}, {xmid, MaxCrd[1], MaxCrd[2]} },
715 { {xmid, ymid, zmid}, {MaxCrd[0], MaxCrd[1], MaxCrd[2]} } };
723 FlgTab,
box, eps,
son[i][0],
son[i][1], ThrIdx );
772 if(!FlgTab[
lnk->idx ])
774 ItmTab[ (*NmbItm)++ ] =
lnk->idx;
775 FlgTab[
lnk->idx ] = 1;
787 itg (UsrPrc)(
void *,
itg),
void *UsrDat,
itg ThrIdx)
790 itg i, ins = 0, out = 0, MinItm = 0, ini[3], *tag, len;
791 fpn MinCrd[3], MaxCrd[3], vec[3];
793 BucSct *IniBuc, *buc, *ngb, **stk;
797 if( (ThrIdx < 0) || (ThrIdx >= tre->
NmbThr) )
801 ThrMsh->
tag = ThrOct->
tag;
805 *MinDis = (MaxDis > 0.) ?
POW(MaxDis) : DBL_MAX;
811 ini[i] = (VerCrd[i] - tre->
bnd[0][i]) / tre->
BucSiz;
812 ini[i] =
MAX(0, ini[i]);
813 ini[i] =
MIN(len-1, ini[i]);
816 IniBuc = &tre->
grd[ ini[0] *
POW(len) + ini[1] * len + ini[2] ];
819 stk[ ins++ ] = IniBuc;
820 tag[ IniBuc->
idx ] = ThrOct->
tag;
829 MinCrd, MaxCrd, UsrPrc, UsrDat, ThrIdx );
834 if( !(ngb =
GetBucNgb(tre, buc, i)) || (tag[ ngb->
idx ] == ThrOct->
tag) )
839 if(
DisVerOct(VerCrd, MinCrd, MaxCrd) < *MinDis)
842 tag[ ngb->
idx ] = ThrOct->
tag;
847 *MinDis = sqrt(*MinDis);
858 fpn MaxDis,
itg (UsrPrc)(
void *,
itg),
void *UsrDat,
864 itg i, ins=0, out=0, MinItm = 0, ini[3], *tag, len;
865 fpn MinCrd[3], MaxCrd[3], vec[3];
867 BucSct *IniBuc, *buc, *ngb, **stk;
870 ThrMsh->
tag = ThrOct->
tag;
874 *MinDis = (MaxDis > 0.) ?
POW(MaxDis) : DBL_MAX;
880 ini[i] = (VerCrd[i] - tre->
bnd[0][i]) / tre->
BucSiz;
881 ini[i] =
MAX(0, ini[i]);
885 IniBuc = &tre->
grd[ ini[0] *
POW(len) + ini[1] * len + ini[2] ];
888 stk[ ins++ ] = IniBuc;
889 tag[ IniBuc->
idx ] = ThrOct->
tag;
897 IntRayOct( tre, msh, VerCrd, VerTng, &MinItm, MinDis, buc->
oct,
898 MinCrd, MaxCrd, UsrPrc, UsrDat, ThrIdx );
904 if( !(ngb =
GetBucNgb(tre, buc, i)) || (tag[ ngb->
idx ] == ThrOct->
tag) )
909 if(!
LinIntBox(VerCrd, VerTng, MinCrd, MaxCrd, tre->
eps))
912 if(
DisVerOct(VerCrd, MinCrd, MaxCrd) < *MinDis)
915 tag[ ngb->
idx ] = ThrOct->
tag;
920 *MinDis = sqrt(*MinDis);
940 fpn CurDis, MinDis = DBL_MAX;
988 && (
dis(VerCrd, TmpVer.
crd) < MinDis) )
990 MinDis =
dis(VerCrd, TmpVer.
crd);
1021 tri = &ThrMsh->
qad.
tri[i];
1038 && (
dis(VerCrd, TmpVer.
crd) < MinDis) )
1040 MinDis =
dis(VerCrd, TmpVer.
crd);
1074 fpn MinCrd[3],
fpn MaxCrd[3] )
1080 MinCrd[i] = tre->
bnd[0][i] + buc->
pos[i] * tre->
BucSiz;
1081 MaxCrd[i] = tre->
bnd[0][i] + (buc->
pos[i]+1) * tre->
BucSiz;
1093 if( (dir == 0) && (buc->
pos[0] > 0) )
1097 if( (dir == 1) && (buc->
pos[0] < tre->
NmbBuc-1) )
1101 if( (dir == 2) && (buc->
pos[1] > 0) )
1105 if( (dir == 3) && (buc->
pos[1] < tre->
NmbBuc-1) )
1109 if( (dir == 4) && (buc->
pos[2] > 0) )
1113 if( (dir == 5) && (buc->
pos[2] < tre->
NmbBuc-1) )
1133 ClpCrd[i] =
MAX(VerCrd[i], MinCrd[i]);
1134 ClpCrd[i] =
MIN(ClpCrd[i], MaxCrd[i]);
1139 return(
DisPow(ClpCrd, VerCrd));
1149 itg (UsrPrc)(
void *,
itg),
void *UsrDat,
itg ThrIdx )
1152 fpn CurDis, SonMin[3], SonMax[3];
1163 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1165 if(
DisVerOct(VerCrd, SonMin, SonMax) <= *MinDis)
1166 GetOctLnk( msh, typ, VerCrd, MinItm, MinDis, oct->
son + i,
1167 SonMin, SonMax, UsrPrc, UsrDat, ThrIdx );
1170 else if((
lnk = oct->
lnk))
1193 if(UsrPrc && !UsrPrc(UsrDat,
lnk->idx))
1206 if(UsrPrc && !UsrPrc(UsrDat,
lnk->idx))
1218 if(CurDis < *MinDis)
1223 }
while((
lnk =
lnk->nex));
1234 fpn MaxCrd[3],
itg (UsrPrc)(
void *,
itg),
void *UsrDat,
1238 fpn CurDis, SonMin[3], SonMax[3];
1250 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1255 IntRayOct( tre, msh, crd, tng, MinItm, MinDis, oct->
son+i,
1256 SonMin, SonMax, UsrPrc, UsrDat, ThrIdx );
1259 else if((
lnk = oct->
lnk))
1274 if(UsrPrc && !UsrPrc(UsrDat,
lnk->idx))
1286 if(CurDis < *MinDis)
1293 }
while((
lnk =
lnk->nex));
1305 const itg TetEdgFac[6][2] = { {2,3}, {1,3}, {1,2}, {0,3}, {0,2}, {0,1} };
1310 ThrMsh->
ver[0].
idx = idx;
1441 fpn MinCrd[3], MaxCrd[3], MidCrd[3], *CrdTab, siz;
1453 MinCrd[j] =
MIN(MinCrd[j], CrdTab[j]);
1454 MaxCrd[j] =
MAX(MaxCrd[j], CrdTab[j]);
1459 siz =
MAX(MaxCrd[0] - MinCrd[0], MaxCrd[1] - MinCrd[1]);
1460 siz =
MAX(siz, MaxCrd[2] - MinCrd[2]);
1461 box->eps = siz * FLT_EPSILON;
1462 box->MinSiz =
box->MaxSiz = siz;
1477 fpn MinCrd[3],
fpn MaxCrd[3] )
1480 fpn SonMin[3], SonMax[3];
1486 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1489 AddVer(msh, tre, oct->
son+i, SonMin, SonMax);
1499 SubOct(msh, tre, oct, MinCrd, MaxCrd);
1510 fpn MinCrd[3],
fpn MaxCrd[3] )
1513 fpn SonMin[3], SonMax[3];
1519 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1523 AddEdg(msh, tre, oct->
son+i, SonMin, SonMax);
1533 SubOct(msh, tre, oct, MinCrd, MaxCrd);
1544 fpn MinCrd[3],
fpn MaxCrd[3] )
1547 fpn SonMin[3], SonMax[3];
1553 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1557 AddTri(msh, tre, oct->
son+i, SonMin, SonMax);
1567 SubOct(msh, tre, oct, MinCrd, MaxCrd);
1578 fpn MinCrd[3],
fpn MaxCrd[3] )
1581 fpn SonMin[3], SonMax[3];
1587 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1591 AddQad(msh, tre, oct->
son+i, SonMin, SonMax);
1601 SubOct(msh, tre, oct, MinCrd, MaxCrd);
1612 fpn MinCrd[3],
fpn MaxCrd[3] )
1615 fpn SonMin[3], SonMax[3];
1621 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1625 AddTet(msh, tre, oct->
son+i, SonMin, SonMax);
1635 SubOct(msh, tre, oct, MinCrd, MaxCrd);
1646 fpn MinCrd[3],
fpn MaxCrd[3] )
1649 fpn SonMin[3], SonMax[3];
1687 while((
lnk = OctLnk))
1696 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1709 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1723 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1737 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1751 SetSonCrd(i, SonMin, SonMax, MinCrd, MaxCrd);
1782 if(
lnk->typ == typ &&
lnk->idx == idx)
1834 fpn MinCrd[3],
fpn MaxCrd[3] )
1843 SonMin[0] = MinCrd[0];
1844 SonMin[1] = MinCrd[1];
1845 SonMin[2] = MinCrd[2];
1846 SonMax[0] = MidCrd[0];
1847 SonMax[1] = MidCrd[1];
1848 SonMax[2] = MidCrd[2];
1852 SonMin[0] = MidCrd[0];
1853 SonMin[1] = MinCrd[1];
1854 SonMin[2] = MinCrd[2];
1855 SonMax[0] = MaxCrd[0];
1856 SonMax[1] = MidCrd[1];
1857 SonMax[2] = MidCrd[2];
1861 SonMin[0] = MinCrd[0];
1862 SonMin[1] = MidCrd[1];
1863 SonMin[2] = MinCrd[2];
1864 SonMax[0] = MidCrd[0];
1865 SonMax[1] = MaxCrd[1];
1866 SonMax[2] = MidCrd[2];
1870 SonMin[0] = MidCrd[0];
1871 SonMin[1] = MidCrd[1];
1872 SonMin[2] = MinCrd[2];
1873 SonMax[0] = MaxCrd[0];
1874 SonMax[1] = MaxCrd[1];
1875 SonMax[2] = MidCrd[2];
1879 SonMin[0] = MinCrd[0];
1880 SonMin[1] = MinCrd[1];
1881 SonMin[2] = MidCrd[2];
1882 SonMax[0] = MidCrd[0];
1883 SonMax[1] = MidCrd[1];
1884 SonMax[2] = MaxCrd[2];
1888 SonMin[0] = MidCrd[0];
1889 SonMin[1] = MinCrd[1];
1890 SonMin[2] = MidCrd[2];
1891 SonMax[0] = MaxCrd[0];
1892 SonMax[1] = MidCrd[1];
1893 SonMax[2] = MaxCrd[2];
1897 SonMin[0] = MinCrd[0];
1898 SonMin[1] = MidCrd[1];
1899 SonMin[2] = MidCrd[2];
1900 SonMax[0] = MidCrd[0];
1901 SonMax[1] = MaxCrd[1];
1902 SonMax[2] = MaxCrd[2];
1906 SonMin[0] = MidCrd[0];
1907 SonMin[1] = MidCrd[1];
1908 SonMin[2] = MidCrd[2];
1909 SonMax[0] = MaxCrd[0];
1910 SonMax[1] = MaxCrd[1];
1911 SonMax[2] = MaxCrd[2];
1926 if( (VerCrd[i] > MaxCrd[i]) || (VerCrd[i] < MinCrd[i]) )
1939 hex->
ver[0]->
crd[0] = MinCrd[0];
1940 hex->
ver[0]->
crd[1] = MinCrd[1];
1941 hex->
ver[0]->
crd[2] = MaxCrd[2];
1942 hex->
ver[1]->
crd[0] = MaxCrd[0];
1943 hex->
ver[1]->
crd[1] = MinCrd[1];
1944 hex->
ver[1]->
crd[2] = MaxCrd[2];
1945 hex->
ver[2]->
crd[0] = MaxCrd[0];
1946 hex->
ver[2]->
crd[1] = MinCrd[1];
1947 hex->
ver[2]->
crd[2] = MinCrd[2];
1948 hex->
ver[3]->
crd[0] = MinCrd[0];
1949 hex->
ver[3]->
crd[1] = MinCrd[1];
1950 hex->
ver[3]->
crd[2] = MinCrd[2];
1951 hex->
ver[4]->
crd[0] = MinCrd[0];
1952 hex->
ver[4]->
crd[1] = MaxCrd[1];
1953 hex->
ver[4]->
crd[2] = MaxCrd[2];
1954 hex->
ver[5]->
crd[0] = MaxCrd[0];
1955 hex->
ver[5]->
crd[1] = MaxCrd[1];
1956 hex->
ver[5]->
crd[2] = MaxCrd[2];
1957 hex->
ver[6]->
crd[0] = MaxCrd[0];
1958 hex->
ver[6]->
crd[1] = MaxCrd[1];
1959 hex->
ver[6]->
crd[2] = MinCrd[2];
1960 hex->
ver[7]->
crd[0] = MinCrd[0];
1961 hex->
ver[7]->
crd[1] = MaxCrd[1];
1962 hex->
ver[7]->
crd[2] = MinCrd[2];
1974 fpn IntCrd[3], NrmTab[3][3] = { {1,0,0}, {0,1,0}, {0,0,1} };
1982 LinIntPla(LinCrd, LinTng, BoxMin, NrmTab[i], IntCrd);
1984 if(
VerInsBox(IntCrd, BoxMin, BoxMax, eps))
1987 LinIntPla(LinCrd, LinTng, BoxMax, NrmTab[i], IntCrd);
1989 if(
VerInsBox(IntCrd, BoxMin, BoxMax, eps))
2018 if((VerCrd[0] < BoxMin[0] - eps) || (VerCrd[1] < BoxMin[1] - eps)
2019 || (VerCrd[2] < BoxMin[2] - eps) || (VerCrd[0] > BoxMax[0] + eps)
2020 || (VerCrd[1] > BoxMax[1] + eps) || (VerCrd[2] > BoxMax[2] + eps) )
2044 if(
EdgIntQad(hex, i, edg, &IntVer, eps))
2100 else if(CurDis > eps)
2210 const itg TetEdg[6][2] = { {0,1}, {1,2}, {2,0}, {3,0}, {3,1}, {3,2} };
2211 const itg TetFac[4][3] = { {3,2,1}, {0,2,3}, {3,1,0}, {0,1,2} };
2218 SubTet.
ver[3] = ver;
2254 || (ver->
crd[i] < hex->
ver[3]->
crd[i]) )
2281 if(fabs(sgn[i]) < eps)
2298 if(sgn[0] * sgn[1] < 0)
2301 + fabs(sgn[1])), edg->
ver[1]->
crd,
2302 fabs(sgn[1]) / (fabs(sgn[0])
2303 + fabs(sgn[1])), edg->
ver[0]->
crd, IntVer->
crd);
2322 edg2.
ver[0] = qad->
ver[i];
2323 edg2.
ver[1] = qad->
ver[ (i+1)%4 ];
2352 if(fabs(sgn[i]) < eps)
2369 if(sgn[0] * sgn[1] < 0)
2372 + fabs(sgn[1])), edg->
ver[1]->
crd,
2373 fabs(sgn[1]) / (fabs(sgn[0])
2374 + fabs(sgn[1])), edg->
ver[0]->
crd, IntVer->
crd);
2393 edg2.
ver[0] = tri->
ver[i];
2394 edg2.
ver[1] = tri->
ver[ (i+1)%3 ];
2414 fpn vec[3][3], nrm[3];
2430 CrsPrd(vec[ (i+1)%3 ], vec[i], nrm);
2446 edg.
ver[0] = tri->
ver[i];
2447 edg.
ver[1] = tri->
ver[ (i+1)%3 ];
2483 siz[1]/(siz[0]+siz[1]), edg2->
ver[0]->
crd, IntVer->
crd);
2550 fpn ImgCrd[3], TmpCrd[3], u[3], v[3], w[3], nrm[3], SubVol[3], TotVol;
2563 SubVol[0] =
MAX(SubVol[0], 0.);
2567 SubVol[1] =
MAX(SubVol[1], 0.);
2571 SubVol[2] =
MAX(SubVol[2], 0.);
2574 TotVol = SubVol[0] + SubVol[1] + SubVol[2];
2582 return(
DisPow(VerCrd, ImgCrd));
2604 fpn CurDis, MinDis = DBL_MAX;
2660 return(
c[0] * (
c[4]*
c[8] -
c[5]*
c[7])
2661 +
c[1] * (
c[5]*
c[6] -
c[3]*
c[8])
2662 +
c[2] * (
c[3]*
c[7] -
c[4]*
c[6]) );
2672 fpn dis0, dis1, TotSiz = 0.;
2678 if( (TotSiz - edg->
siz) < .00001 * (TotSiz + edg->
siz))
2684 return(
MIN(dis0, dis1));
2734 fpn LinTng[3],
fpn ImgCrd[3] )
2750 fpn PlaNrm[3],
fpn ImgCrd[3] )
2757 DisPla =
DotPrd(u, PlaNrm);
2758 MulVec2(DisPla, PlaNrm, ImgCrd);
2762 return(fabs(DisPla));
2775 return(
DotPrd(vec, PlaNrm));
2785 if(( ((box1[0][0] > box2[0][0] - eps) && (box1[0][0] < box2[1][0] + eps))
2786 || ((box1[1][0] > box2[0][0] - eps) && (box1[1][0] < box2[1][0] + eps))
2787 || ((box1[0][0] < box2[0][0] ) && (box1[1][0] > box2[1][0] )))
2788 && ( ((box1[0][1] > box2[0][1] - eps) && (box1[0][1] < box2[1][1] + eps))
2789 || ((box1[1][1] > box2[0][1] - eps) && (box1[1][1] < box2[1][1] + eps))
2790 || ((box1[0][1] < box2[0][1] ) && (box1[1][1] > box2[1][1] )))
2791 && ( ((box1[0][2] > box2[0][2] - eps) && (box1[0][2] < box2[1][2] + eps))
2792 || ((box1[1][2] > box2[0][2] - eps) && (box1[1][2] < box2[1][2] + eps))
2793 || ((box1[0][2] < box2[0][2] ) && (box1[1][2] > box2[1][2] ))) )
2808 fpn srf, len, MaxLen;
2813 MaxLen =
MAX(len, MaxLen);
2815 MaxLen =
MAX(len, MaxLen);
2817 return(sqrt(MaxLen / srf));
2832 siz +=
POW(b[i] - a[i]);
2844 siz +=
POW(b[i] - a[i]);
2900 w[0] = u[1] * v[2] - u[2] * v[1];
2901 w[1] = u[2] * v[0] - u[0] * v[2];
2902 w[2] = u[0] * v[1] - u[1] * v[0];
2911 v3[i] =
w1 * v1[i] + w2 * v2[i];
2979 return(sqrt(
POW(u[0]) +
POW(u[1]) +
POW(u[2])));
2991 mem = malloc(
sizeof(
MemSct));
2993 mem->
adr = malloc(siz);
3029 itg *NmbTri,
itg *TriTab1,
itg *TriTab2,
3030 itg *NmbQad,
itg *QadTab1,
itg *QadTab2,
3031 itg *NmbTet,
itg *TetTab1,
itg *TetTab2,
3032 itg *NmbPyr,
itg *PyrTab1,
itg *PyrTab2,
3033 itg *NmbPri,
itg *PriTab1,
itg *PriTab2,
3034 itg *NmbHex,
itg *HexTab1,
itg *HexTab2,
3035 itg *BasIdx,
itg *NmbThr)
3038 *NmbTri, TriTab1, TriTab2, *NmbQad, QadTab1, QadTab2,
3039 *NmbTet, TetTab1, TetTab2, *NmbPyr, PyrTab1, PyrTab2,
3040 *NmbPri, PriTab1, PriTab2, *NmbHex, HexTab1, HexTab2,
3041 *BasIdx, *NmbThr ));
3056 fpn *MaxDis,
void *UsrPrc,
void *UsrDat,
itg *ThrIdx)
3059 *MaxDis, UsrPrc, UsrDat, *ThrIdx));