📄 ibgoutput.c
字号:
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 + -