📄 ibgoutput.c
字号:
/* last edit: Ilja Schmelzer -------------- 28-FEB-1995 11:07:13.73 */
/************************************************************************/
/* */
/* <<< I B G >>> - Intersection - Based Grid generation package */
/* */
/* Version 1.1 by Ilja Schmelzer schmelzer@iaas-berlin.d400.de */
/* */
/* to be distributed under IBG license conditions (see "readme.ibg") */
/* */
/************************************************************************/
#include "ibg.h"
#include "ibgoutput.h"
#include "ibgapplication.h"
#include "ibgdefault.h"
#include "ibgg.h"
#include "ibgc.h"
#include "ibglib.h"
#include "ibgerror.h"
#include <stdio.h>
#include <string.h>
/* declaration of external parameters - ibgSMAX-arrays: */
int ibgMaterial[ibgSMAX];
int ibgBCondition[ibgSMAX];
int ibgColRegion[ibgSMAX];
int ibgColFace[ibgSMAX];
int ibgColLine[ibgSMAX];
int ibgColNode[ibgSMAX];
int ibgColMaterial[ibgSMAX];
int ibgColBCondition[ibgSMAX];
ibgBoolean ibgOSSpecial[ibgSMAX];
char* ibgNameRegion[ibgSMAX];
char* ibgNameFace[ibgSMAX];
char* ibgNameLine[ibgSMAX];
char* ibgNameNode[ibgSMAX];
char* ibgNameMaterial[ibgSMAX];
char* ibgNameBCondition[ibgSMAX];
/* other arrays: */
ibgSegment ibgOSList[ibgOSMaxLength];
ibgFloat ibgWX[ibgDIM];
ibgFloat ibgWAlpha,ibgWBeta;
ibgFloat ibgWXMin[ibgDIM];
ibgFloat ibgWXMax[ibgDIM];
ibgColor ibgColorOf[ibgColorMAX];
char* ibgColorName[ibgColorMAX];
ibgBoolean ibgOutputType[IBGSTMAX];
char* ibgSname[IBGSTMAX] = {"IsRegion","IsFace","IsLine","IsNode",
""};
/* declaration and initialization of scalar external parameters: */
int (*ibgBCDefault)(ibgSegment u1, ibgSegment u2) = ibgBCDefaultDirichlet;
ibgBoolean ibgMOn;
ibgBoolean ibgBCOn;
ibgSegmentType ibgOSType;
ibgBoolean ibgOSOutside;
int ibgOSMode;
int ibgOSListLength;
char* ibgOSName;
int ibgIdPoint;
int ibgIdCell;
ibgBoolean ibgWindow;
int ibgColorFree;
int ibgColorCurrent;
int ibgColDoubleBoundary;
int ibgColSingleBoundary;
int ibgColOutsideBoundary;
ibgSegment ibgOSSegment;
ibgBoolean ibgResetGrid;
char* ibgNameApplication;
char* ibgNameFile;
int ibgFileMode;
ibGrid *ibggCurrent;
int ibgFileModFree;
char* ibgFileModName[ibgFileModMAX];
char* ibgFileType[ibgFileModMAX];
int (*(ibgFileOutput[ibgFileModMAX]))(ibGrid *g, FILE *file);
static int ibgreadcolors();
void ibgOutputInit()
{ibgSegment u; int color,fmod;
ibgBCDefault = ibgBCDefaultDirichlet;
ibgMOn = ibgFalse;
ibgBCOn = ibgFalse;
ibgOSType = ibgSRegion;
ibgOSOutside = ibgFalse;
ibgOSMode = ibgOSModSpecial;
ibgOSListLength = 0;
ibgOSName = ibgOSNoName;
ibgIdPoint = ibgIdModOff;
ibgIdCell = ibgIdModOff;
ibgWindow = ibgFalse;
ibgColorFree = 0;
ibgColorCurrent = -1;
ibgColDoubleBoundary = ibgColModMax;
ibgColSingleBoundary = ibgColModSelf;
ibgColOutsideBoundary = ibgColModSelf;
ibgOSSegment = ibgRSpace;
ibgResetGrid = ibgTrue;
if(ibgNameApplication == ibgNULL) ibgNameApplication = "ibg";
ibgNameFile = "ibg";
ibgFileMode = ibgFileModNone;
ibgFileModFree = 0;
ibggCurrent = ibgNULL;
for(u=0;u<ibgSMAX;u++){
ibgMaterial[u] = u;
ibgBCondition[u] = u;
ibgNameRegion[u] = ibgOSNoName;
ibgNameFace[u] = ibgOSNoName;
ibgNameMaterial[u] = ibgOSNoName;
ibgNameBCondition[u] = ibgOSNoName;
ibgColRegion[u] = ibgColDefaultRegion;
ibgColFace[u] = ibgColDefaultFace;
ibgColLine[u] = ibgColDefaultLine;
ibgColNode[u] = ibgColDefaultNode;
ibgColMaterial[u] = ibgColDefaultRegion;
ibgColBCondition[u] = ibgColDefaultFace;
ibgOSSpecial[u] = ibgTrue;
}
for(u=0;u<IBGSTMAX;u++) ibgOutputType[u] = ibgFalse;
ibgNameRegion[0] = "Unknown";
ibgNameFace[0] = "Unknown";
ibgNameMaterial[0] = "Unknown";
ibgNameBCondition[0] = "Unknown";
ibgNameMaterial[ibgMAir] = "Air";
ibgNameRegion[ibgRSpace] = "Space";
ibgNameBCondition[ibgBCDirichlet] = "Dirichlet";
ibgNameBCondition[ibgBCNeumann] = "Neumann";
ibgNameBCondition[ibgBCMixed] = "Mixed";
/* color declarations: */
ibgreadcolors();
color = ibgDeclareColor("ColBackground", "#fdf5e6"); /* OldLace */
ibgAssert(color == ibgColBackground);
color = ibgDeclareColor("ColError", "#ff0000"); /* red */
ibgAssert(color == ibgColError);
color = ibgDeclareColor("ColForeground", "#000000"); /* black */
ibgAssert(color == ibgColForeground);
color = ibgDeclareColor("ColDefaultNode", "#b22222"); /* firebrick */
ibgAssert(color == ibgColDefaultNode);
color = ibgDeclareColor("ColDefaultLine", "#ff6347"); /* tomato */
ibgAssert(color == ibgColDefaultLine);
color = ibgDeclareColor("ColDefaultFace", "#e9967a"); /* DarkSalmon */
ibgAssert(color == ibgColDefaultFace);
ibgAssert(color == ibgColDefaultBCondition);
ibgColBCondition[ibgBCDirichlet] =
ibgDeclareColor("ColDirichlet", "#32cd32"); /* LimeGreen */
ibgColBCondition[ibgBCNeumann] =
ibgDeclareColor("ColNeumann", "#4169e1"); /* RoyalBlue */
ibgColBCondition[ibgBCMixed] =
ibgDeclareColor("ColMixed", "#20b2aa"); /* LightSeaGreen */
color = ibgDeclareColor("ColDefaultRegion", "#a0522d"); /* sienna */
ibgAssert(color == ibgColDefaultRegion);
ibgAssert(color == ibgColDefaultMaterial);
ibgColMaterial[ibgMAir] = ibgColRegion[ibgRSpace] =
ibgDeclareColor("ColAir", "#c0c0c0"); /* gray */
/* output function list initialization: */
fmod = ibgDeclareFileMode("None", "", ibgNoFunction);
ibgAssert(fmod == ibgFileModNone);
fmod = ibgDeclareFileMode("ibgDump", "dmp", ibGridSave);
ibgAssert(fmod == ibgFileModSave);
fmod = ibgDeclareFileMode("ibGrid", "grd", ibGridWrite);
ibgAssert(fmod == ibgFileModWrite);
fmod = ibgDeclareFileMode("Simplex", "smp", ibgToSimplex);
ibgAssert(fmod == ibgFileModSimplex);
}
void ibgOutput(ibGrid *g)
{char c,filename[500];
int i,rc,notype=1;
FILE *file;
int d;
ibggCurrent = g;
if(ibgResetGrid){
ibgResetGrid = ibgFalse;
for(d=0;d<ibgDIM;d++){
ibgWXMin[d] = ibgridXMin(*g,d);
ibgWXMax[d] = ibgridXMax(*g,d);
ibgWX[d] = ibgridXMax(*g,d) - ibgridXMin(*g,d);
if(ibgWX[d]<= 0.0) ibgWX[d] = 1.0;
}
ibgWindow = ibgTrue;
if(ibgridGDIM(*g) == 3){
ibgOutputType[ibgSRegion] = ibgFalse;
ibgOutputType[ibgSFace] = ibgTrue;
}else{
ibgOutputType[ibgSRegion] = ibgTrue;
ibgOutputType[ibgSFace] = ibgFalse;
}
}
/* user control over output parameters: */
ibgControl();
/* consistency tests: */
if((ibgFileMode <= ibgFileModNone)||
(ibgFileMode >= ibgFileModFree)) {
ibgmessage(ibgMEIncFileMode);
return;
}
/* file name creation (with correct file type): */
i=0;
while(c=ibgNameFile[i]){
filename[i++] = c; if(c=='.') notype=0;
}
if(notype){int j=0;
filename[i++] = '.';
while(filename[i++]=(ibgFileType[ibgFileMode])[j++]);
}
filename[i++] = '\0';
/* start of file writing: */
file = fopen(filename,"w");
if(file==NULL){
/* unable to open file */
ibgmessage(ibgMEOpenFile);
ibgprintf("%s", filename);
ibgmsgreset;
return;
}
if(ibgFileOutput[ibgFileMode]){
rc = ibgFileOutput[ibgFileMode](g,file);
if(rc != ibgSuccess){
ibgmessage(ibgMEWriteFile);
}else{
ibgmessage(ibgMIWriteFile);
}
ibgprintf("%s", filename);
}else{
/* output function not defined */
ibgmessage(ibgMEIncFileMode);
}
ibgmsgreset;
fclose(file);
return;
}
ibgBoolean ibgOSelected(ibgSegment u)
{char* nam;int i;
switch(ibgOSMode){
case ibgOSModAll: return ibgTrue;
case ibgOSModOne:
if(u==ibgOSSegment) return ibgTrue; else return ibgFalse;
case ibgOSModSpecial:
if((u<0)||(u>=ibgSMAX)) return ibgOSSpecial[0];
else return ibgOSSpecial[u];
case ibgOSModName:
if((u<0)||(u>=ibgSMAX)) u = 0;
switch(ibgOSType){
case ibgSRegion: nam = ibgNameRegion[u]; break;
case ibgSFace: nam = ibgNameFace[u]; break;
case ibgSLine: nam = ibgNameLine[u]; break;
case ibgSNode: nam = ibgNameNode[u]; break;
}
if(strcmp(nam,ibgOSName)) return ibgFalse; else return ibgTrue;
case ibgOSModNamed:
if((u<0)||(u>=ibgSMAX)) u = 0;
switch(ibgOSType){
case ibgSRegion: nam = ibgNameRegion[u]; break;
case ibgSFace: nam = ibgNameFace[u]; break;
case ibgSLine: nam = ibgNameLine[u]; break;
case ibgSNode: nam = ibgNameNode[u]; break;
}
if(nam == ibgOSNoName) return ibgFalse; else return ibgTrue;
case ibgOSModList:
for(i=0;i<ibgOSListLength;i++){
if(u == ibgOSList[i]) return ibgTrue;
}
return ibgFalse;
}
}
ibgBoolean ibgOSelectedRegion(ibgSegment u)
{if(ibgOutputType[ibgSRegion]){
if(ibgOSType == ibgSRegion)
return ibgOSelected(u);
else
return ibgFalse;
}else{
return ibgFalse;
}
}
ibgBoolean ibgOSelectedFace(ibgSegment u, ibgSegment left, ibgSegment right)
{if(ibgOutputType[ibgSFace]){
switch(ibgOSType){
case ibgSRegion:
if(!ibgOSOutside){
if(left==0) return ibgFalse;
if(right==0) return ibgFalse;
}
if(ibgOSelected(left)) return ibgTrue;
if(ibgOSelected(right)) return ibgTrue;
return ibgFalse;
case ibgSFace:
if(u<ibgSMAX)
return ibgOSelected(u);
default:
return ibgFalse;
}
}else{
return ibgFalse;
}
}
ibgBoolean ibgOSelectedLine(ibgSegment u)
{if(ibgOutputType[ibgSLine]){
switch(ibgOSType){
case ibgSLine:
return ibgOSelected(u);
case ibgSNode:
return ibgFalse;
default:
return ibgTrue;
}
}else{
return ibgFalse;
}
}
ibgBoolean ibgOSelectedNode(ibgSegment u)
{if(ibgOutputType[ibgSNode]){
if(ibgOSType == ibgSNode)
return ibgOSelected(u);
else
return ibgTrue;
}else{
return ibgFalse;
}
}
ibgBoolean ibgIdentPoint(int n, char* ident)
{int num; char* nam; ibgSegmentType typ;
switch(ibgIdPoint){
case ibgIdModOff: return ibgFalse;
case ibgIdModOn:
num = n;
goto numwrite;
case ibgIdModTyp:
num = ibgpType(ibgridPoint(*ibggCurrent,n));
goto numwrite;
case ibgIdModSegment:
num = ibgpSegment(ibgridPoint(*ibggCurrent,n));
goto numwrite;
case ibgIdModMaterial:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -