/******************************************************************************
* Irtprscc.c - Provide a routine to compress Irit objects. *
* Reference paper: "Coding of 3D virtual objects with NURBS" *
*******************************************************************************
* (C) Gershon Elber, Technion, Israel Institute of Technology *
*******************************************************************************
* Written by Yura Zharkovsky 2003 *
******************************************************************************/
#include <stdio.h>
#include <math.h>
#ifdef IPC_BIN_COMPRESSION
#ifdef __WINNT__
#include <io.h>
#include <direct.h>
#endif /* __WINNT__ */
#include "irit_sm.h"
#include "prsr_loc.h"
#include "cagd_lib.h"
#include "obj_dpnd.h"
#include "allocate.h"
#include "geom_lib.h"
#include "misc_lib.h"
/* Minimum buffer, used in Test mode. */
#define IPC_TEST_BUFF_SIZE IPC_INPUT_BUFFER_LEN
#define IPC_TEST_COMP_SIZE (int)(IPC_INPUT_BUFFER_LEN * 1.1)
#define IPC_TEST_PREDICTOR_FAVOR(x) (x = (long)((double)x * 0.9))
#define IPC_BUFF_SIZE 100*1024
/* Used in order to free allocated buffers when compression ends. */
#define IPC_TEST_FREE_BUFFERS (-1)
/* Test mode constants, used in order to specify current test state. */
typedef enum {
IPC_TEST_ON,
IPC_TEST_OFF,
IPC_TEST_SIZE,
IPC_TEST_RUNNING
} IpcTestMode;
/* Global variable indicate that Test mode for predictors is on/off. */
STATIC_DATA IpcTestMode
_IpcGlobalTestMode = IPC_TEST_OFF;
/* Global set of angles, used for angle predictor. */
CagdRType
_IpcAnglesCos[IPC_ANGLES_SET_AUX][IPC_ANGLES_MAX] =
{
{0.0, 1.0},
{-0.5, -1.0, -0.5, 1.0, 1.0, 1.0}
};
int
_IpcAnglesNum[IPC_ANGLES_SET_AUX] = { 2, 6 };
/* private declarations of predictors. */
static void IpcPredictPointsSrf(CagdRType *QntPoints[],
IpcCtlPtStruct *Errs,
CagdSrfStruct *Srf,
IpcArgs *Args);
static void IpcPredictPointsAnglesSrf(CagdRType *QntPoints[],
IpcCtlPtStruct *Errs,
CagdSrfStruct *Srf,
IpcArgs *Args);
static void IpcPredictPointsUniform(IpcCtlPtStruct *PtDiffs,
CagdRType *Points[],
int NumPoints,
IpcArgs *Args);
static void IpcPredictPointsMultiVar(MvarMVStruct *MV,
IpcCtlPtStruct *PtDiffs,
float QntError);
static void IpcPredictPointsTrivTV(CagdRType *QntPoints[],
IpcCtlPtStruct *PtDiffs,
TrivTVStruct *TV,
float QntError);
static void IpcPredictPoints2D(IpcCtlPtStruct *PtDiffs,
CagdRType *Points[],
int NumPoints,
IpcArgs *Args);
static void IpcPredictPointsArc(IpcCtlPtStruct *PtDiffs,
CagdRType *Points[],
int NumPoints,
IpcArgs *Args);
static ByteType IpcPredictPointsAnglesAux(IpcCtlPtStruct *Errs,
CagdRType *QPts[],
CagdRType *Pts[],
int Block,
int BlockLen,
IpcArgs *Args);
static void IpcArcFindCenterAndRadius(RealType *R2,
PointType Pt0,
PointType Pt1,
PointType Pt2,
PointType Pt3);
static void IpcPredictPointsSetAngles(IpcCtlPtStruct *Errs,
CagdRType *Points[],
int NumPoints);
static void IpcPredictWeightsUniform(IpcCtlPtStruct *Errs,
CagdRType *Weights,
IpcArgs *Args);
static void IpcCompressObjAux(IpcFile *f, IPObjectStruct *PObj, IpcArgs *Args);
static void IpcCompressObjAux1(IpcFile *f,
IPObjectStruct *PObj,
ByteType ObjMap,
IpcArgs *Args);
static int IpcCompressObj2(IpcFile *f,
IPObjectStruct *PObj,
float QntError);
static ByteType IpcSetArgumentsObj(IpcFile *f,
IPObjectStruct *PObj,
ByteType ObjMap,
IpcArgs *Args);
static IpcPredictorType IpcSetArgumentsCrv(IpcFile *f,
IPObjectStruct *PObj,
ByteType ObjMap,
IpcArgs *Args);
static IpcPredictorType IpcSetArgumentsSrf(IpcFile *f,
IPObjectStruct *PObj,
ByteType ObjMap,
IpcArgs *Args);
static int IpcCompressTestAux(IpcTestMode Mode, void *Data, long DataLen);
static int IpcCompressMode(void);
static char* IpcGetMapFileName(FILE *f);
static void _IpcFileToStream(char *MapFileName, FILE *Stream);
static void IpcCompressContinue(IpcFile *f, ByteType StreamContinue);
static void IpcCompressDynamicObj(IpcFile *f,
IPObjectStruct *PObj,
ByteType Map,
IpcArgs *Args);
static void IpcCompressDependencies(IpcFile *f,
IPODObjectDpndncyStruct *Dpnds,
IpcArgs *Args);
static void IpcCompressAttributes(IpcFile *f,
IPAttributeStruct *Attr,
IpcArgs *Args);
static int IpcCompressUnion(IpcFile *f, IPObjectStruct *PObj, IpcArgs *Args);
static void IpcCompressSrf(IpcFile *f, CagdSrfStruct *Srfs, IpcArgs *Args);
static void IpcCompressTrimSrf(IpcFile *f,
TrimSrfStruct *TrimSrfs,
IpcArgs *Args);
static void IpcCompressTrimCrvList(IpcFile *f,
TrimCrvStruct *Crvs,
IpcArgs *Args);
static void IpcCompressTrimCrvSegList(IpcFile *f,
TrimCrvSegStruct *TrimCrvSegs,
IpcArgs *Args);
static void IpcCompressCrvs(IpcFile *f, CagdCrvStruct *Crvs, IpcArgs *Args);
static void IpcCompressCtlPt(IpcFile *f,
CagdCtlPtStruct *CtlPt,
IpcArgs *Args);
static void IpcCompressKV(IpcFile *f, IpcKnotVectorStruct *KV, float QntError);
static void IpcCompressPoints(IpcFile *f,
IpcCtlPtStruct *Points,
float QntError);
static void IpcCompressPointsAngles(IpcFile *f,
IpcCtlPtStruct *Points,
float QntError);
static void IpcCompressString(IpcFile *f, char *String);
static void IpcCompressStrings(IpcFile *f, IpcStrings *Strings);
static int IpcCompressAsByte(IpcFile *f, void *Data, long DataLen);
static int IpcCompressDoubleAsInt(IpcFile *f, void *Data, long DataLen);
static int IpcCompress(IpcFile *f, void *Data, long DataLen);
static int IpcCompressAux(IpcFile *f, ByteType *Buffer, long Size);
static long IpcCompressTest(IpcTestMode Mode);
static void IpcCompressTriSrfs(IpcFile *f,
TrngTriangSrfStruct *TriSrfs,
IpcArgs *Args);
static void IpcCompressInstances(IpcFile *f,
IPInstanceStruct *Instances,
IpcArgs *Args);
static void IpcCompressMultiVar(IpcFile *f, MvarMVStruct *MVs, IpcArgs *Args);
static void IpcCompressTrivTV(IpcFile *f, TrivTVStruct *TVs, IpcArgs *Args);
static void IpcCompressPolygons(IpcFile *f,
IPPolygonStruct *Pl,
IpcArgs *Args);
static void IpcCompressVertex(IpcFile *f,
IPVertexStruct *PVertex,
int IsSame,
IpcArgs *Args);
static void IpcCompressPointFloat(IpcFile *f, PointType *Pt, IpcArgs *Args);
static void IpcCompressModels(IpcFile *f, MdlModelStruct *Mdls, IpcArgs *Args);
static void IpcCompressTrimSrfList(IpcFile *f,
MdlTrimSrfStruct *TrimSrfList,
IpcArgs *Args);
static void IpcCompressLoopList(IpcFile *f,
MdlLoopStruct *LoopList,
IpcArgs *Args);
static void IpcCompressTrimSegList(IpcFile *f,
MdlTrimSegStruct *TrimSegs,
IpcArgs *Args);
static void IpcEncodeTriSrf(TrngTriangSrfStruct *TriSrf,
Ipc
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
<br>实体模型建模分析工具包:<br>IRIT is a solid modeler developed for educational purposes. Although small, it is now powerful enough<br>to create quite complex scenes.<br>IRIT started as a polygonal solid modeler and was originally developed on an IBM PC under<br>MSDOS. Version 2.0 was also ported to X11 and version 3.0 to SGI 4D systems. Version 3.0 also<br>includes quite a few free form curves and surfaces tools. See the UPDATE.NEW file for more detailed<br>update information. In Version 4.0, the display devices were enhanced, freeform curves and surfaces are<br>more extensively supported, functions can be defined, and numerous improvement and optimizations<br>are added.
资源推荐
资源详情
资源评论
收起资源包目录
开放源码实体模型建模分析工具包V9.5 (1158个子文件)
INSTALL_readme.1st 11KB
3dhead.32 45KB
makefile.ami 19KB
makefile.ami 16KB
makefile.ami 12KB
makefile.ami 11KB
makefile.ami 11KB
makefile.ami 9KB
makefile.ami 8KB
makefile.ami 8KB
makefile.ami 8KB
makefile.ami 7KB
makefile.ami 7KB
makefile.ami 4KB
makefile.ami 4KB
makefile.ami 4KB
makefile.ami 4KB
makefile.ami 4KB
makeflag.ami 3KB
makefile.ami 2KB
makefile.ami 2KB
makefile.ami 2KB
makefile.ami 2KB
makefile.ami 1KB
makefile.ami 541B
makefile.ami 537B
makefile.ami 488B
makefile.ami 401B
makefile.ami 328B
makefile.ami 277B
makeflag.wce.arm 4KB
makeflag.wce.armD 4KB
backup 186B
maketags.bat 1KB
make-irit-iparser.bat 1KB
make-irit.bat 708B
version_files.bat 635B
make_mips.bat 113B
make_sh3.bat 112B
make_arm.bat 112B
make_x86em.bat 111B
forward.bmp 126B
rewind.bmp 126B
stop.bmp 126B
play.bmp 126B
playback.bmp 126B
iritprsc.c 215KB
iritprsd.c 154KB
gen_grap.c 148KB
editcrvs.c 141KB
igs_irit.c 115KB
freefrm4.c 112KB
allocate.c 112KB
xmtdrvs.c 111KB
editsrfs.c 108KB
freefrm3.c 107KB
bsp_knot.c 103KB
freefrm2.c 102KB
freefrm6.c 101KB
cagd_aux.c 101KB
iritprs1.c 99KB
cagd2gen.c 98KB
cbzr_tbl.c 98KB
geom_bsc.c 98KB
iritvrml.c 95KB
wntdrvs.c 94KB
fit2pts.c 92KB
smp_skel.c 92KB
xgladap.c 91KB
freefrm5.c 91KB
opngl2cg.c 88KB
ccnvhul.c 88KB
poly_sil.c 87KB
os2drvs.c 87KB
objects2.c 84KB
cagd1gen.c 84KB
freefrm7.c 82KB
objects1.c 77KB
ip_cnvrt.c 76KB
iritprsb.c 75KB
sbsp_aux.c 74KB
freefrm1.c 70KB
xmt_anim.c 69KB
composit.c 67KB
trim_aux.c 67KB
trim2pl2.c 67KB
polysimp.c 66KB
bool1low.c 66KB
miscattr.c 65KB
geomat3d.c 64KB
x11drvs.c 64KB
opngl_cg.c 63KB
cagd2ply.c 63KB
crv_skel.c 63KB
irit.c 63KB
cnv2irit.c 62KB
3ds2irit.c 62KB
cbsp_int.c 61KB
primitv1.c 60KB
curvatur.c 59KB
共 1158 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
资源评论
wyz20020214
- 粉丝: 2
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功