; (OCIColl *)(m_geom_obj->sdo_elem_info), (sb4)(global_elem_index + 1), (boolean *)&exists, (dvoid **)&oci_number, (dvoid **)0)); checkerr(errhp, OCINumberToInt(errhp, oci_number, (uword)sizeof(ub4), OCI_NUMBER_UNSIGNED, (dvoid *)&element_type));
printf("-- element type: %u \n", element_type); fflush (stdout);
return element_type; }
/******************************************************************************* ** ** Routine: get_interpretation ** ** Description: Prints the interpretation field for current element. ** *******************************************************************************/ ub4 WReadAndWriteGeometry::get_interpretation (void)
{ boolean exists; OCINumber *oci_number; ub4 interpretation;
checkerr(errhp, OCICollGetElem(envhp, errhp, (OCIColl *)(m_geom_obj->sdo_elem_info), (sb4)(global_elem_index + 2), (boolean *)&exists, (dvoid **)&oci_number, (dvoid **)0));
checkerr(errhp, OCINumberToInt(errhp, oci_number, (uword)sizeof(ub4), OCI_NUMBER_UNSIGNED, (dvoid *)&interpretation));
printf("-- interpretation: %u \n", interpretation); fflush(stdout);
return interpretation; }
/******************************************************************************* ** ** Routine: get_ordinates ** ** Description: Prints ordinates out of the ordinates array. ** *******************************************************************************/ void WReadAndWriteGeometry::get_ordinates (int starting_offset, int ending_offset)
{ int col; boolean exists; OCINumber *oci_number; double double_val;
/* ** Get ordinates for the current element. */ for (col = starting_offset; col <= ending_offset; col++) { checkerr(errhp, OCICollGetElem(envhp, errhp, (OCIColl *)(m_geom_obj->sdo_ordinates), (sb4)col, (boolean *)&exists, (dvoid **)&oci_number, (dvoid **)0)); checkerr(errhp, OCINumberToReal(errhp, oci_number, (uword)sizeof(double), (dvoid *)&double_val)); if ((col % global_num_dimensions) == 0) printf("%.9lf", double_val); else printf(", %.9lf", double_val);
if ((col % global_num_dimensions) == (global_num_dimensions - 1)) printf("\n"); } /* end for */
printf("\n"); }
/******************************************************************************* ** ** Routine: get_next_ending_offset ** ** Description: Returns the ending offset of current element. ** *******************************************************************************/ int WReadAndWriteGeometry::get_next_ending_offset (int processing_type_4or5)
{ boolean exists; OCINumber *oci_number; int ending_offset;
/* last element? */ if (global_elem_index == global_nelems - 3) ending_offset = global_nords; else { checkerr(errhp, OCICollGetElem(envhp, errhp, (OCIColl *)(m_geom_obj->sdo_elem_info), (sb4)(global_elem_index + 3), (boolean *)&exists, (dvoid **)&oci_number, (dvoid **)0)); checkerr(errhp, OCINumberToInt(errhp, oci_number, (uword)sizeof(int), OCI_NUMBER_SIGNED, (dvoid *)&ending_offset));
if (processing_type_4or5) { /* Add 1 to next elements starting offset */ ending_offset++; } else { /* Subtract 1 from next elements starting offset */ ending_offset--; } }
/* shift offsets from 1..n to 0..n-1 */ ending_offset--;
printf("-- ending offset: %d \n", ending_offset+1);
return ending_offset; }
/******************************************************************************* ** ** Routine: get_next_starting_offset ** ** Description: Returns the starting offset of the current element. ** *******************************************************************************/ int WReadAndWriteGeometry::get_next_starting_offset (int read_varray)
{ boolean exists; OCINumber *oci_number; int starting_offset;
/* get the element info structure */ if (read_varray) { /* This is the first element, get the starting offset */ checkerr(errhp, OCICollGetElem(envhp, errhp, (OCIColl *)(m_geom_obj->sdo_elem_info), (sb4)(global_elem_index), (boolean *)&exists, (dvoid **)&oci_number, (dvoid **)0));
/* get starting and ending offsets in ordinate array */ checkerr(errhp, OCINumberToInt(errhp, oci_number, (uword)sizeof(ub4), OCI_NUMBER_SIGNED, (dvoid *)&starting_offset));
/* shift offsets from 1..n to 0..n-1 */ starting_offset--; } else starting_offset = global_ending_offset + 1; printf("-- starting offset: %d \n", starting_offset+1);
return starting_offset; }
/******************************************************************************* ** ** Routine: sc_ops_get_type1 ** ** Description: Print the ordinates for a type1 element. ** *******************************************************************************/ void WReadAndWriteGeometry::sc_ops_get_type1 (void)
{ int i, interp, start, end;
start = get_next_starting_offset (global_ending_offset == -1); end = get_next_ending_offset (0); interp = get_interpretation ();
for (i = 0; i < interp; i++) { get_ordinates (start, start + global_num_dimensions - 1); start = start + global_num_dimensions; } }
/******************************************************************************* ** ** Routine: sc_ops_get_type2 ** ** Description: Print the ordi
上一页 [1] [2] [3] [4] [5] 下一页 没有相关教程
|