1#ifndef  __JBXL_CPP_THINNING_H_ 
    2#define  __JBXL_CPP_THINNING_H_ 
   43    int   i, j, k, l, m, n, w, b, nn, mm; 
 
   53    if (mode!=26)  mode = 6;
 
   64    for (i=0; i<gd.
xs*gd.
ys*gd.
zs; i++) {
 
   67            dd = 
Min(dd, gd.
gp[i]);
 
   68            rr = 
Max(rr, gd.
gp[i]);
 
   76    for (k=1; k<gd.
zs-1; k++) {
 
   78        for (j=1; j<gd.
ys-1; j++) {
 
   80            for (i=1; i<gd.
xs-1; i++) {
 
   83                    w = gd.
gp[n+1]*gd.
gp[n-1]*gd.
gp[n+xs]*gd.
gp[n-xs]   
 
   84                                    *gd.
gp[n+ps]*gd.
gp[n-ps];
 
   87                        ld.lv = (int)gd.
gp[n];
 
  102            if (px->ldat.lv<=dd) {
 
  103                dt = 
deletable(gd, px->ldat.id, mode, 3);
 
  107                        tList* pv = px->prev;
 
  111                    else px->ldat.lv = m/3 + 7;
 
  122        for (b=7; b<=15; b++) {
 
  125                if (px->ldat.lv==b) {
 
  126                    dt = 
deletable(gd, px->ldat.id, mode, 3);
 
  130                            tList* pv = px->prev;
 
  138                            tList* pv = px->prev;
 
  144                                ld.lv = (int)gd.
gp[ld.id];
 
  150                                ld.lv = (int)gd.
gp[ld.id];
 
  154                            if (gd.
gp[i+xs]>20) {
 
  156                                ld.lv = (int)gd.
gp[ld.id];
 
  160                            if (gd.
gp[i-xs]>20) {
 
  162                                ld.lv = (int)gd.
gp[ld.id];
 
  166                            if (gd.
gp[i+ps]>20) {
 
  168                                ld.lv = (int)gd.
gp[ld.id];
 
  172                            if (gd.
gp[i-ps]>20) {
 
  174                                ld.lv = (int)gd.
gp[ld.id];
 
  193            if (px->ldat.lv>20) {
 
  194                dd = 
Min(dd, px->ldat.lv);
 
  202            if (px->ldat.lv==16) mm++;
 
  206    } 
while (dd<rr || mm!=nn);
 
  208    vp.setup(gd.
xs, gd.
ys, gd.
zs);
 
  209    for (i=0; i<gd.
xs*gd.
ys*gd.
zs; i++) vp.
gp[i] = (T)gd.
gp[i];
 
 
  224    if (vp.
gp[n+1]      !=0) m++;
 
  225    if (vp.
gp[n-1]      !=0) m++;
 
  226    if (vp.
gp[n+xs]     !=0) m++;
 
  227    if (vp.
gp[n-xs]     !=0) m++;
 
  228    if (vp.
gp[n+ps]     !=0) m++;
 
  229    if (vp.
gp[n-ps]     !=0) m++;
 
  230    if (vp.
gp[n+1+xs]   !=0) m++;
 
  231    if (vp.
gp[n+1-xs]   !=0) m++;
 
  232    if (vp.
gp[n-1+xs]   !=0) m++;
 
  233    if (vp.
gp[n-1-xs]   !=0) m++;
 
  234    if (vp.
gp[n+1+ps]   !=0) m++;
 
  235    if (vp.
gp[n+1-ps]   !=0) m++;
 
  236    if (vp.
gp[n-1+ps]   !=0) m++;
 
  237    if (vp.
gp[n-1-ps]   !=0) m++;
 
  238    if (vp.
gp[n+xs+ps]  !=0) m++;
 
  239    if (vp.
gp[n+xs-ps]  !=0) m++;
 
  240    if (vp.
gp[n-xs+ps]  !=0) m++;
 
  241    if (vp.
gp[n-xs-ps]  !=0) m++;
 
  242    if (vp.
gp[n+1+xs+ps]!=0) m++;
 
  243    if (vp.
gp[n+1+xs-ps]!=0) m++;
 
  244    if (vp.
gp[n+1-xs+ps]!=0) m++;
 
  245    if (vp.
gp[n+1-xs-ps]!=0) m++;
 
  246    if (vp.
gp[n-1+xs+ps]!=0) m++;
 
  247    if (vp.
gp[n-1+xs-ps]!=0) m++;
 
  248    if (vp.
gp[n-1-xs+ps]!=0) m++;
 
  249    if (vp.
gp[n-1-xs-ps]!=0) m++;
 
 
  270    int  i, j, k, l, m, lz, ly, mz, my;
 
  277        for (j=-1; j<=1; j++) {
 
  280            for (i=-1; i<=1; i++) {
 
  283                if (vp.
gp[m]!=0) v[l] = 1;
 
  292        for (k=-1; k<=1; k++) {
 
  294            mz = n + k*vp.
xs*vp.
ys;
 
  295            for (j=-1; j<=1; j++) {
 
  298                for (i=-1; i<=1; i++) {
 
  301                    if (vp.
gp[m]>0) v[l] = 1;
 
  309    if (cn==-1 || cn!=1) 
return false;
 
  313        for(i=0; i<mm; i++) v[i] = 1 - v[i];
 
  316    nh = v[10] + v[12] + v[14] + v[16] + v[4] + v[22];
 
  317    if    (nh<=3) ret = 
true;
 
 
MSGraph用 数学ライブラリ ヘッダ in Graph Library.
 
int zs
zサイズ. 4Byte. 2Dの場合は 1.
 
void free(void)
グラフィックデータを開放する
 
int connectNumber(int *w, int c, int d)
 
MSGraph< int > euclidDistance(MSGraph< T > vp, int bc, int &rr)
 
int nonZeroBoxel(MSGraph< T > vp, int n)
 
MSGraph< T > centerLine(MSGraph< T > gx, int mode)
 
bool deletable(MSGraph< T > vp, int n, int c, int d)
 
MSGraph< T > CenterLine(MSGraph< T > gx, int mode)
 
tList * add_tList_node_bydata(tList *pp, tList_data ldat)
データ(ldat)からリスト用ノードを生成し(new),それを指定したリストの後ろに追加.
 
tList * del_tList_node(tList **node)
リスト用のノードを削除.
 
tList_data init_tList_data(void)
空のノードデータを静的に作成.データを初期化するのに使用する.
 
tList * new_tList_node(void)
リスト用の空ノードを動的に生成する.