⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ibgoutput.c

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 C
📖 第 1 页 / 共 2 页
字号:
	num = ibgpSegment(ibgridPoint(*ibggCurrent,n));
	if((num<0) || (num>=ibgSMAX))	num = 0;
	typ = ibgpType(ibgridPoint(*ibggCurrent,n));
	switch(typ){
	case ibgSRegion:
		num = ibgMaterial[num];	break;
	case ibgSFace:
		num = ibgBCondition[num]; break;
	}
	goto numwrite;
 case ibgIdModNType:
	num = ibgpType(ibgridPoint(*ibggCurrent,n));
	nam = ibgSname[num];
	goto txtwrite;
 case ibgIdModNSegment:
	num = ibgpSegment(ibgridPoint(*ibggCurrent,n));
	if((num<0) || (num>=ibgSMAX))	num = 0;
	typ = ibgpType(ibgridPoint(*ibggCurrent,n));
	switch(typ){
	case ibgSRegion:	nam = ibgNameRegion[num];	goto txtwrite;
	case ibgSFace:		nam = ibgNameFace[num];		goto txtwrite;
	case ibgSLine:		nam = ibgNameLine[num];		goto txtwrite;
	case ibgSNode:	nam = ibgNameNode[num];	goto txtwrite;
	}
 case ibgIdModNMaterial:
	num = ibgpSegment(ibgridPoint(*ibggCurrent,n));
	if((num<0) || (num>=ibgSMAX))	num = 0;
	typ = ibgpType(ibgridPoint(*ibggCurrent,n));
	switch(typ){
	case ibgSRegion:
		num = ibgMaterial[num];
		nam = ibgNameMaterial[num];	goto txtwrite;
	case ibgSFace:
		num = ibgBCondition[num];
		nam = ibgNameBCondition[num];	goto txtwrite;
	case ibgSLine:
		nam = ibgNameLine[num];		goto txtwrite;
	case ibgSNode:
		nam = ibgNameNode[num];	goto txtwrite;
	}
 }
numwrite:
 sprintf(ident,"%u",num);
 return ibgTrue;
txtwrite:
 sprintf(ident,"%s",nam);
 return ibgTrue;
}

ibgBoolean	ibgIdentCell(int c, char* ident)
{int num; char* nam; ibgCellType typ;
 switch(ibgIdCell){
 case ibgIdModOff:	return ibgFalse;
 case ibgIdModOn:
	num = c;
	goto numwrite;
 case ibgIdModTyp:
	num = ibgridCellType(*ibggCurrent,c);
	goto numwrite;
 case ibgIdModSegment:
	num = ibgridCellSegment(*ibggCurrent,c);
	goto numwrite;
 case ibgIdModMaterial:
	num = ibgridCellSegment(*ibggCurrent,c);
	if((num<0) || (num>=ibgSMAX))	num = 0;
	typ = ibgridCellType(*ibggCurrent,c);
	switch(typ){
	case ibgSRegion:
		num = ibgMaterial[num];	break;
	case ibgSFace:
		num = ibgBCondition[num]; break;
	}
	goto numwrite;
 case ibgIdModNType:
	num = ibgridCellType(*ibggCurrent,c);
	nam = ibgcname[num];
	goto txtwrite;
 case ibgIdModNSegment:
	num = ibgridCellSegment(*ibggCurrent,c);
	if((num<0) || (num>=ibgSMAX))	num = 0;
	typ = ibgridCellType(*ibggCurrent,c);
	switch(typ){
	case ibgSRegion:	nam = ibgNameRegion[num];	goto txtwrite;
	case ibgSFace:		nam = ibgNameFace[num];		goto txtwrite;
	case ibgSLine:		nam = ibgNameLine[num];		goto txtwrite;
	case ibgSNode:	nam = ibgNameNode[num];	goto txtwrite;
	}
 case ibgIdModNMaterial:
	num = ibgridCellSegment(*ibggCurrent,c);
	if((num<0) || (num>=ibgSMAX))	num = 0;
	typ = ibgridCellType(*ibggCurrent,c);
	switch(typ){
	case ibgSRegion:
		num = ibgMaterial[num];
		nam = ibgNameMaterial[num];	goto txtwrite;
	case ibgSFace:
		num = ibgBCondition[num];
		nam = ibgNameBCondition[num];	goto txtwrite;
	case ibgSLine:
		nam = ibgNameLine[num];		goto txtwrite;
	case ibgSNode:
		nam = ibgNameNode[num];	goto txtwrite;
	}
 }
numwrite:
 sprintf(ident,"%u",num);
 return ibgTrue;
txtwrite:
 sprintf(ident,"%s",nam);
 return ibgTrue;
}

int	ibgColorRegion(ibgSegment u)
{
 if((u>=ibgSMAX) || (u<0)){
	if(ibgMOn)	return ibgColDefaultMaterial;
	else		return ibgColDefaultRegion;
 }
 if(ibgMOn)	return ibgColMaterial[ibgMaterial[u]];
 else		return ibgColRegion[u];
}

int	ibgColorFace(ibgSegment u, ibgSegment left, ibgSegment right)
{int mod;ibgSegment u0,u1,u2;
 if(left){
	if(ibgOSelected(left)){
		if(right){
			if(ibgOSelected(right)){
			      	mod = ibgColDoubleBoundary;
				u1  = left; u2 = right;
			}else{
			      	mod = ibgColSingleBoundary;
				u1  = left; u2 = right;
			}
		}else{
			mod = ibgColOutsideBoundary;
			u1  = left; u2 = right;
		}
	}else{
		if(right){
			if(ibgOSelected(right)){
			      	mod = ibgColSingleBoundary;
				u1  = right; u2 = left;
			}else{
				if(u<ibgSMAX)	return ibgColFace[u];
				return ibgColError;
			}
		}else{
			if(u<ibgSMAX)	return ibgColFace[u];
			return ibgColError;
		}
 	}
 }else{
	if(right){
		if(ibgOSelected(right)){
		      	mod = ibgColOutsideBoundary;
			u1  = right; u2 = left;
		}else{
			if(u<ibgSMAX)	return ibgColFace[u];
			return ibgColError;
		}
	}else{
		if(u<ibgSMAX)	return ibgColFace[u];
		return ibgColError;
	}
 }
 switch(mod){
	case ibgColModZero:	return ibgColDefaultFace;
	case ibgColModMax:	if(u1>u2) u0 = u1; else u0 = u2; break;
	case ibgColModMin:	if(u1<u2) u0 = u1; else u0 = u2; break;
	case ibgColModSelf:	u0 = u1; break;
	case ibgColModOther:	u0 = u2; break;
	case ibgColModBC:
		if((u>=ibgSMAX) || (u<0)){
		 	if(ibgBCOn)
				return ibgColBCondition[ibgBCDefault(u1,u2)];
			else
				return ibgColDefaultFace;
		}
	 	if(ibgBCOn)
			return ibgColBCondition[ibgBCondition[u]];
		else
			return ibgColFace[u];
 }
 return ibgColorRegion(u0);
}

int	ibgColorLine(ibgSegment u)
{if((u>=ibgSMAX) || (u<0))	return ibgColDefaultLine;
 return ibgColLine[u];
}

int    	ibgColorNode(ibgSegment u)
{if((u>=ibgSMAX) || (u<0))	return ibgColDefaultNode;
 return ibgColNode[u];
}

int	ibgBCDefaultDirichlet(ibgSegment u1, ibgSegment u2)
{return ibgBCDirichlet;}
int	ibgBCDefaultNeumann(ibgSegment u1, ibgSegment u2)
{return ibgBCNeumann;}
int	ibgBCDefaultMixed(ibgSegment u1, ibgSegment u2)
{return ibgBCMixed;}
int	ibgBCDefaultMax(ibgSegment u1, ibgSegment u2)
{if(u1>u2) return u1; else return u2;}
int	ibgBCDefaultMin(ibgSegment u1, ibgSegment u2)
{if(u1<u2) return u1; else return u2;}


ibgBoolean	ibgInWindow(ibgPoint *n)
{ibgFloat x,y,z;
 if(((x=ibgpX(*n)[0]) < ibgWXMin[0]) || (x > ibgWXMax[0])) return ibgFalse;
 if(((y=ibgpX(*n)[1]) < ibgWXMin[1]) || (y > ibgWXMax[1])) return ibgFalse;
 if(((z=ibgpX(*n)[2]) < ibgWXMin[2]) || (z > ibgWXMax[2])) return ibgFalse;
 return ibgTrue;
}

ibgBoolean	ibgWindowCoord(ibgPoint *n, ibgFloat *x)
{
 x[0] = (ibgpX(*n)[0] - ibgWXMin[0]) / ibgWX[0];
 if((x[0] < -0.01) || (x[0] > 1.01))	return ibgFalse;
 x[1] = (ibgpX(*n)[1] - ibgWXMin[1]) / ibgWX[1];
 if((x[1] < -0.01) || (x[1] > 1.01))	return ibgFalse;
 x[2] = (ibgpX(*n)[2] - ibgWXMin[2]) / ibgWX[2];
 if((x[2] < -0.01) || (x[2] > 1.01))	return ibgFalse;
 x[0] *= 0.9; x[0] += 0.05;
 x[1] *= 0.9; x[1] += 0.05;
 x[2] *= 0.9; x[2] += 0.05;
 return ibgTrue;
}

#define R4MaxColors 1000
static ibgColor R4Colors[R4MaxColors];
static char*	R4ColorNames[R4MaxColors];
#define R4MaxChars 10000
static char	R4NameString[R4MaxChars];
static int   	R4colors;

ibgBoolean	ibgOSetColor(int id, char* rgb)
{int r,g,b,rc,i;
 if(*rgb == '#'){
	switch(strlen(rgb)){
	case 4:
		rc = sscanf(rgb,"#%1x%1x%1x",&r,&g,&b);
		r *= 0x1000;
		g *= 0x1000;
		b *= 0x1000;
		break;
	case 7:
		rc = sscanf(rgb,"#%2x%2x%2x",&r,&g,&b);
		r *= 0x100;
		g *= 0x100;
		b *= 0x100;
		break;
	case 10:
		rc = sscanf(rgb,"#%3x%3x%3x",&r,&g,&b);
		r *= 0x10;
		g *= 0x10;
		b *= 0x10;
		break;
	case 13:
		rc = sscanf(rgb,"#%4x%4x%4x",&r,&g,&b);
	      	break;
	default:
		rc = 0;
	}
	if(rc < 3)	return ibgFalse;
	(ibgColorOf[id]).r = r;
	(ibgColorOf[id]).g = g;
	(ibgColorOf[id]).b = b;
	return ibgTrue;
 }else{
	for(i=0;i<R4colors;i++){
		if(strcmp(R4ColorNames[i],rgb)) continue;
		ibgColorOf[id] = R4Colors[i];
		return ibgTrue;
	}
	return ibgFalse;
 }
}


static char buffer[500];
static int buflen=500;

/* This function reads the X11 color definition file rgb.txt.
It contains lines of the following format:
255 255 255		white
*/

static int ibgreadcolors()
{FILE *file;
/* FILE *fout; allows to print out in format "#ffffff white" */
 int last=0,col=0,r,g,b,rc;
 char s2[50];
 file = fopen("rgb.txt","r+");
/* fout = fopen("ibgcolors.txt","w");*/
 if(file==NULL){
	R4colors = 0;
	return ibgFalse;
 }
 while(!feof(file)){
  	fgets(buffer,buflen,file);
	rc = sscanf(buffer,"%d %d %d %s %s",&r,&g,&b,&R4NameString[last],s2);
	if(rc != 4) continue;
	R4Colors[col].r = r*0x100;
	R4Colors[col].g = g*0x100;
	R4Colors[col].b = b*0x100;
	R4ColorNames[col]= &R4NameString[last];
/*	fprintf(fout,"#%2x%2x%2x %s\n",r,g,b,&R4NameString[last]);*/
	last += strlen(R4ColorNames[col])+1;
	col++;
	if(col >= R4MaxColors) 		break;
	if(last>= R4MaxChars+20)	break;
 }
 R4colors = col;
 fclose(file);
/* fclose(fout);*/
 return ibgTrue;
}

int	ibgDeclareColor(char* name, char* value)
{int last = ibgColorFree++;
 if(ibgColorFree >= ibgColorMAX)	return 0;
 ibgColorName[last]		= name;
 ibgColorName[ibgColorFree]	= "";
 ibgOSetColor(last,value);
 return last;
}

int	ibgDeclareFileMode(char* mode, char* filetype,
	   	   	int (*output)(ibGrid *g, FILE *file)
	)
{int last = ibgFileModFree++;
 if(ibgFileModFree >= ibgFileModMAX)	return 0;
 ibgFileModName[last]	= mode;
 ibgFileType[last]	= filetype;
 ibgFileOutput[last]	= output;
 ibgFileModName[ibgFileModFree]	= "";
 return last;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -