📄 ibgdfunction.c
字号:
/* last edit: Ilja Schmelzer -------------- 17-OCT-1994 19:56:27.40 */
/************************************************************************/
/* */
/* <<< 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") */
/* */
/************************************************************************/
/* <<< IBGDFunction >>> - Intersection-Based Geometry - Floatin Point Function
*/
#define const
#include "ibglib.h"
#include "ibgi.h"
#include "ibgd.h"
#include "ibg.h"
#include "ibgd0.h"
typedef struct{
ibGeometryRec g;
ibGeometry gold;
int fnum;
ibgFloat (*func)(void *fThis,ibgPoint *x);
ibgPtObject fThis;
}ibgDFunctionRec,*ibgDFunction;
#ifdef ibgFloatValues
static int RegionOfPoint(ibGeometry g, ibgPoint *nint, const ibgPoint *nold)
{ibgDFunction func = (ibgDFunction )g;
int rc = ibgiRegionOfPoint(func->gold,nint,nold);
if(rc != ibgNotFound)
ibgpF(*nint)[func->fnum] = func->func(func->fThis,nint);
return rc;
}
static int FaceWithEdge(ibGeometry g, ibgPoint *nint,
const ibgPoint *n1, const ibgPoint *n2)
{ibgDFunction func = (ibgDFunction )g;
int rc = ibgiFaceWithEdge(func->gold,nint,n1,n2);
if(rc != ibgNotFound)
ibgpF(*nint)[func->fnum] = func->func(func->fThis,nint);
return rc;
}
static int LineWithTriangle(ibGeometry g, ibgPoint *nint, ibgPoint *nface,
const ibgPoint *n1, const ibgPoint *n2, const ibgPoint *n3)
{ibgDFunction func = (ibgDFunction )g;
int rc = ibgiLineWithTriangle(func->gold,nint,nface,n1,n2,n3);
if(rc != ibgNotFound)
ibgpF(*nint)[func->fnum] = func->func(func->fThis,nint);
return rc;
}
static int NodeInTetrahedron(ibGeometry g, ibgPoint *nint, ibgPoint *nline,
const ibgPoint *n1, const ibgPoint *n2,
const ibgPoint *n3, const ibgPoint *n4)
{ibgDFunction func = (ibgDFunction )g;
int rc = ibgiNodeInTetrahedron(func->gold,nint,nline,n1,n2,n3,n4);
if(rc != ibgNotFound)
ibgpF(*nint)[func->fnum] = func->func(func->fThis,nint);
return rc;
}
static int Free(ibGeometry g)
{ibgDFunction func=((ibgDFunction )g);
ibgdFree(func->gold);
return ibgSuccess;
}
#endif
static ibGeometryClassRec ibgDFunctionClass;
ibGeometry ibgdFunction(ibGeometry gold, int fnum,
ibgFloat (*func)(void *fThis, ibgPoint *n),
ibgPtObject fThis)
{ibgDFunctionRec *fnc;
#ifdef ibgFloatValues
if(fnum < 0 || fnum >= ibgFloatValues) goto noplace;
fnc = (ibgDFunction) malloc(sizeof(ibgDFunctionRec));
fnc->gold =gold;
fnc->fnum=fnum;
fnc->func=func; fnc->fThis=fThis;
ibgdInitialize((ibGeometry)fnc,&ibgDFunctionClass);
ibgDFunctionClass.RegionOfPoint = RegionOfPoint;
ibgDFunctionClass.FaceWithEdge = FaceWithEdge;
ibgDFunctionClass.LineWithTriangle = LineWithTriangle;
ibgDFunctionClass.NodeInTetrahedron = NodeInTetrahedron;
ibgDFunctionClass.Free = Free;
return (ibGeometry)fnc;
#endif
noplace:
ibgfatal;
return gold;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -