00001
00002
00003
00004
00005
00006 #include <stdio.h>
00007 #include <stdlib.h>
00008 #include <string.h>
00009 #include <math.h>
00010
00011 #include "amr3t.h"
00012 #include "amr3b.h"
00013
00014 void *PFSRtreeCreate(void)
00015 {
00016 PFS3Rtree *r3;
00017 r3=new PFS3Rtree(4,10);
00018 r3->Create();
00019 return (void*)r3;
00020 }
00021
00022 void PFSRtreeDestroy(void *r)
00023 {
00024 PFS3Rtree *r3=(PFS3Rtree*)r;
00025 r3->Delete();
00026 }
00027
00028 void PFSRtreeInsert(void *r,
00029 void *info,
00030 double xmin,double xmax,
00031 double ymin,double ymax,
00032 double zmin,double zmax)
00033 {
00034 PFS3Rtree *r3=(PFS3Rtree*)r;
00035 PFS3BoxId bid;
00036 bid.P=info;
00037 bid.Xmin=xmin, bid.Xmax=xmax,
00038 bid.Ymin=ymin, bid.Ymax=ymax,
00039 bid.Zmin=zmin, bid.Zmax=zmax;
00040 r3->Insert(&bid);
00041 }
00042
00043 void PFSRtreeDelete(void *r,
00044 void *info,
00045 double xmin,double xmax,
00046 double ymin,double ymax,
00047 double zmin,double zmax)
00048 {
00049 PFS3Rtree *r3=(PFS3Rtree*)r;
00050 PFS3BoxId bid;
00051 bid.P=info;
00052 bid.Xmin=xmin, bid.Xmax=xmax,
00053 bid.Ymin=ymin, bid.Ymax=ymax,
00054 bid.Zmin=zmin, bid.Zmax=zmax;
00055 r3->Remove(&bid);
00056 }
00057
00058 void PFSRtreeInitTraverse(void *r)
00059 {
00060 PFS3Rtree *r3=(PFS3Rtree*)r;
00061 r3->SearchAll();
00062 }
00063
00064 void *PFSRtreeTraverse(void *r,
00065 double *xmin,double *xmax,
00066 double *ymin,double *ymax,
00067 double *zmin,double *zmax)
00068 {
00069 PFS3Rtree *r3=(PFS3Rtree*)r;
00070 PFS3BoxId bid;
00071 if (!r3->ResultAll(&bid))
00072 {
00073 *xmin=bid.Xmin,
00074 *xmax=bid.Xmax,
00075 *ymin=bid.Ymin,
00076 *ymax=bid.Ymax,
00077 *zmin=bid.Zmin,
00078 *zmax=bid.Zmax;
00079 return bid.P;
00080 }
00081 return NULL;
00082 }
00083
00084 void PFSRtreeInitSearchBox(void *r,
00085 double xmin,double xmax,
00086 double ymin,double ymax,
00087 double zmin,double zmax)
00088 {
00089 PFS3Rtree *r3=(PFS3Rtree*)r;
00090 PFS3Box b;
00091 b.Xmin=xmin, b.Ymin=ymin, b.Zmin=zmin,
00092 b.Xmax=xmax, b.Ymax=ymax, b.Zmax=zmax;
00093 r3->Search(&b);
00094 }
00095
00096 void *PFSRtreeSearchBox(void *r,
00097 double *xmin,double *xmax,
00098 double *ymin,double *ymax,
00099 double *zmin,double *zmax)
00100 {
00101 PFS3Rtree *r3=(PFS3Rtree*)r;
00102 PFS3BoxId bid;
00103 if(!r3->Result(&bid))
00104 {
00105 *xmin=bid.Xmin,
00106 *xmax=bid.Xmax,
00107 *ymin=bid.Ymin,
00108 *ymax=bid.Ymax,
00109 *zmin=bid.Zmin,
00110 *zmax=bid.Zmax;
00111 return bid.P;
00112 }
00113 return NULL;
00114 }