32{
33 uint32_t p, i, n_out_points=0, p1_set=0, p2_set=0;
36 double *dlist;
37 double deltaval, quarter_delta, val1, val2;
39 int new_npoints = inpts->
npoints * 2;
41
42 dlist = (
double*)(
opts->serialized_pointlist);
43
45
46 if(preserve_endpoint)
47 {
49 n_out_points++;
50 }
51
53 {
54 memcpy(&p2, &p1,
sizeof(
POINT4D));
56 if(p>0)
57 {
58 p1_set = p2_set = 0;
59 for (i=0;i<ndims;i++)
60 {
61 val1 = ((double*) &(p1))[i];
62 val2 = ((double*) &(p2))[i];
63 deltaval = val1 - val2;
64 quarter_delta = deltaval * 0.25;
65 if(!preserve_endpoint || p > 1)
66 {
67 dlist[n_out_points * ndims + i] = val2 + quarter_delta;
68 p1_set = 1;
69 }
70 if(!preserve_endpoint || p < inpts->npoints - 1)
71 {
72 dlist[(n_out_points + p1_set) * ndims + i] = val1 - quarter_delta;
73 p2_set = 1;
74 }
75 }
76 n_out_points+=(p1_set + p2_set);
77 }
78 }
79
80
81 if(preserve_endpoint)
82 {
83 opts->npoints = n_out_points;
85 n_out_points++;
86 }
87
88 if(isclosed && !preserve_endpoint)
89 {
90 opts->npoints = n_out_points;
93 n_out_points++;
94 }
95 opts->npoints = n_out_points;
96
98
99}
POINT4D getPoint4d(const POINTARRAY *pa, uint32_t n)
POINTARRAY * ptarray_construct_empty(char hasz, char hasm, uint32_t maxpoints)
Create a new POINTARRAY with no points.
#define FLAGS_GET_Z(flags)
#define FLAGS_GET_M(flags)
int ptarray_append_point(POINTARRAY *pa, const POINT4D *pt, int allow_duplicates)
Append a point to the end of an existing POINTARRAY If allow_duplicate is LW_FALSE,...
#define LW_TRUE
Return types for functions with status returns.
int ptarray_has_z(const POINTARRAY *pa)
int ptarray_has_m(const POINTARRAY *pa)