void CDLUpdateDlg::DisplayColumnHeadings(UINT iStringId) { int iPos,iID; int iCount = 0; int iIDSDom[] = {IDS_DOMTYPE_CODE,IDS_DOMTYPE_VIS}; int iIDSTodo[] = {IDS_DOMACTION_CHANGED,IDS_DOMACTION_NEW,IDS_DOMACTION_DELETE,IDS_DOMACTION_NOTHING}; CString strHeadings; strHeadings.LoadString(iStringId); m_DomainListCtrl.SetColumnWidth(-1, -3); // LVSCW_AUTOSIZE); EraseList(); while((iPos = strHeadings.Find(_T(","))) != -1) { CString strItem; strItem = strHeadings.Left(iPos); switch(iCount) { case 1: iID = GetMaxStringId(strItem,iIDSDom,FC_ARRAY_LEN(iIDSDom)); break; default: iID = 0; break; } AddColumn(strItem, iCount++,iID); strItem = strHeadings.Mid(iPos + 1); strHeadings = strItem; } iID = GetMaxStringId(strHeadings,iIDSTodo,FC_ARRAY_LEN(iIDSTodo)); AddColumn(strHeadings, iCount,iID); return; }
void DeWall(Point3 *v[], Point3 *BaseV, int *UsedPoint, int n, List Q, List T, enum Axis a) { List Ln=NULL_LIST, La=NULL_LIST, Lp=NULL_LIST; Tetra *t; ShortTetra *st; Face *f; int i,j; UG g; Plane alpha; alpha.N.x=0; alpha.N.y=0; alpha.N.z=0; alpha.off=0; if(n>20) if(UGScaleFlag) BuildUG(v,UsedPoint,n, (int)(n*UGScale),&g); /* Initialize Uniform Grid */ else BuildUG(v,UsedPoint,n, n,&g); Ln=NewList(FIFO,sizeof(Face)); /* Initialize Active Face */ ChangeEqualObjectList(EqualFace,Ln); /* List Ln. */ if(n>40) HashList(n/4,HashFace,Ln); La=NewList(FIFO,sizeof(Face)); /* Initialize Active Face */ ChangeEqualObjectList(EqualFace,La); /* List La. */ if(n>40) HashList(n/4,HashFace,La); Lp=NewList(FIFO,sizeof(Face)); /* Initialize Active Face */ ChangeEqualObjectList(EqualFace,Lp); /* List Lp. */ if(n>40) HashList(n/4,HashFace,Lp); switch(a) { case XAxis : qsort((void *)v, (size_t)n, sizeof(Point3 *), (int (*)(const void *,const void *))XComp); alpha.N.x = 1; alpha.off = (v[n/2-1]->x+v[n/2]->x)/2; break; case YAxis : qsort((void *)v, (size_t)n, sizeof(Point3 *), (int (*)(const void *,const void *))YComp); alpha.N.y = 1; alpha.off = (v[n/2-1]->y+v[n/2]->y)/2; break; case ZAxis : qsort((void *)v, (size_t)n, sizeof(Point3 *), (int (*)(const void *,const void *))ZComp); alpha.N.z = 1; alpha.off = (v[n/2-1]->z+v[n/2]->z)/2; break; } if(CountList(Q)==0) { t=FirstTetra(v,n); for(i=0;i<4;i++) { switch (Intersect(t->f[i],&alpha)) { case 0 : InsertList(t->f[i], La); break; case 1 : InsertList(t->f[i], Lp); break; case -1 : InsertList(t->f[i], Ln); break; } for(j=0;j<3;j++) if(t->f[i]->v[j]->mark==-1) t->f[i]->v[j]->mark=1; else t->f[i]->v[j]->mark++; } st=Tetra2ShortTetra(t,BaseV); free(t); InsertList(st,T); SI.Face+=4; } else { while(ExtractList(&f,Q)) switch (Intersect(f,&alpha)) { case 0 : InsertList(f, La); break; case 1 : InsertList(f, Lp); break; case -1 : InsertList(f, Ln); break; } } while(ExtractList(&f,La)) { if(n>20) t=FastMakeTetra(f,v,n,&g); else t=MakeTetra(f,v,n); if(t==NULL) SI.CHFace++; else { st=Tetra2ShortTetra(t,BaseV); if(SafeTetraFlag) if(MemberList(st, T)) Error("Cyclic Tetrahedra Creation\n",EXIT); InsertList(st,T); SI.Face+=3; SI.Tetra++; if(UpdateFlag) if(SI.Tetra%50 == 0) printf("Tetrahedra Built %i\r",SI.Tetra++); for(i=1;i<4;i++) switch (Intersect(t->f[i],&alpha)) { case 0 : if(MemberList(t->f[i],La)) { DeleteCurrList(La); SI.Face--; for(j=0;j<3;j++) t->f[i]->v[j]->mark--; free(t->f[i]); } else { InsertList(t->f[i],La); for(j=0;j<3;j++) if(t->f[i]->v[j]->mark==-1) t->f[i]->v[j]->mark=1; else t->f[i]->v[j]->mark++; } break; case 1 : if(MemberList(t->f[i],Lp)) { DeleteCurrList(Lp); SI.Face--; for(j=0;j<3;j++) t->f[i]->v[j]->mark--; free(t->f[i]); } else { InsertList(t->f[i],Lp); for(j=0;j<3;j++) if(t->f[i]->v[j]->mark==-1) t->f[i]->v[j]->mark=1; else t->f[i]->v[j]->mark++; } break; case -1: if(MemberList(t->f[i],Ln)) { DeleteCurrList(Ln); SI.Face--; for(j=0;j<3;j++) t->f[i]->v[j]->mark--; free(t->f[i]); } else { InsertList(t->f[i],Ln); for(j=0;j<3;j++) if(t->f[i]->v[j]->mark==-1) t->f[i]->v[j]->mark=1; else t->f[i]->v[j]->mark++; } break; } free(t->f[0]); free(t); } free(f); } if(SI.WallSize==0) SI.WallSize=SI.Tetra; /* if(n>20) EraseUG(&g); */ switch(a) { case XAxis : if(CountList(Ln)>0) DeWall(v, BaseV,UsedPoint,n/2, Ln,T,YAxis); if(CountList(Lp)>0) DeWall(&(v[n/2]),BaseV,UsedPoint,n-(n/2),Lp,T,YAxis); break; case YAxis : if(CountList(Ln)>0) DeWall(v, BaseV,UsedPoint,n/2, Ln,T,ZAxis); if(CountList(Lp)>0) DeWall(&(v[n/2]),BaseV,UsedPoint,n-(n/2),Lp,T,ZAxis); break; case ZAxis : if(CountList(Ln)>0) DeWall(v, BaseV,UsedPoint,n/2, Ln,T,XAxis); if(CountList(Lp)>0) DeWall(&(v[n/2]),BaseV,UsedPoint,n-(n/2),Lp,T,XAxis); break; } EraseList(Ln); EraseList(La); EraseList(Lp); }