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;
}
示例#2
0
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);
}