/*================================================================*\ FILE: UtilIntfData.c PURPOSE: Printf content of IntfData to file HISTORY: 17-Nov-98 I-01-27 Pavel $$1 Created 17-Dec-98 I-01-27 Alexey $$2 ProUtilDoubleArrayPrint: Get rid of "negative" zero values in output 01-Jun-99 I-03-12 mka $$3 More includes \*================================================================*/ /*----------------------------------------------------------*\ Headers \*----------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /*----------------------------------------------------------*\ Macros \*----------------------------------------------------------*/ #define VECTOR(a) a[0], a[1], a[2] /*=========================================================================*\ Function: ProUtilDoubleArrayPrint() Purpose: Prints double array to file \*=========================================================================*/ void ProUtilDoubleArrayPrint( FILE *file, /* In : file */ char *str, /* In : the line prefix */ double *p_double, /* In : the double array */ int n_double) /* In : the number of values in the array */ { int i; ProCharLine buf, line; strcpy(line, str); for (i=0; i 70 || (i == n_double -1)) { fprintf(file, "%s\n", line); strcpy(line, str); } else { strcat(line, " "); } } } /*=========================================================================*\ Function: ProUtilCurvedataPrint() Purpose: Prints curve data to file \*=========================================================================*/ ProError ProUtilCurvedataPrint( FILE *file, char *str, ProCurvedata *p_curve_data) { ProError err; ProEnttype c_type; ProCharLine next_line, next_line2; int i, n_point, n_knots, degree, n_comp; double *p_par_arr, *p_weight_arr, st_a, en_a, rad; double d1, d2; Pro3dPnt p1, p2; ProVector v1, v2; ProPoint3d *p_pnt_arr, *p_tan_arr; ProComponentCurvedata *p_comp_arr; ProCurvedata curve_data; ProCurveDir dir; strcpy(next_line, str); strcat(next_line, " "); strcpy(next_line2, next_line); strcat(next_line2, " "); err = ProCurvedataTypeGet(p_curve_data, &c_type); TEST_CALL_REPORT("ProCurvedataTypeGet()", "ProUtilCurvedataPrint()", err, err != PRO_TK_NO_ERROR); switch(c_type) { case PRO_ENT_POINT: err = ProPointdataGet(p_curve_data, p1); TEST_CALL_REPORT("ProPointdataGet()", "ProUtilCurvedataPrint()", err, err != PRO_TK_NO_ERROR); fprintf(file, "%sType Point\n", str); fprintf(file, "%spos ( %.5f, %.5f, %.5f)\n", next_line, VECTOR(p1)); break; case PRO_ENT_LINE: err = ProLinedataGet(p_curve_data, p1, p2); TEST_CALL_REPORT("ProLinedataGet()", "ProUtilCurvedataPrint()", err, err != PRO_TK_NO_ERROR); fprintf(file,"%sType Line \n", str); fprintf(file,"%send1 ( %.5f, %.5f, %.5f)\n", next_line, VECTOR(p1)); fprintf(file,"%send2 ( %.5f, %.5f, %.5f)\n", next_line, VECTOR(p2)); break; case PRO_ENT_ARC: err = ProArcdataGet(p_curve_data, v1, v2, p1, &st_a, &en_a, &rad); TEST_CALL_REPORT("ProArcdataGet()", "ProUtilCurvedataPrint()", err, err != PRO_TK_NO_ERROR); fprintf(file,"%sType Line\n", str); fprintf(file,"%svec1 ( %.5f, %.5f, %.5f)\n", next_line, VECTOR(v1)); fprintf(file,"%svec2 ( %.5f, %.5f, %.5f)\n", next_line, VECTOR(v2)); fprintf(file,"%sorigin ( %.5f, %.5f, %.5f)\n", next_line, VECTOR(p1)); fprintf(file,"%sstart_angle %.5f\n", next_line, st_a); fprintf(file,"%send_angle %.5f\n", next_line, en_a); fprintf(file,"%sradius %.5f\n", next_line, rad); break; case PRO_ENT_SPLINE: err = ProSplinedataGet(p_curve_data, &p_par_arr, &p_pnt_arr, &p_tan_arr, &n_point); TEST_CALL_REPORT("ProSplinedataGet()", "ProUtilCurvedataPrint()", err, err != PRO_TK_NO_ERROR); fprintf(file,"%sType Spline\n", str); fprintf(file,"%sParameters\n", str); ProUtilDoubleArrayPrint(file, next_line, p_par_arr, n_point); fprintf(file,"%sPoints\n", str); ProUtilDoubleArrayPrint(file, next_line, (double*)p_pnt_arr, n_point * 3); fprintf(file,"%sTangent Vectors\n", str); ProUtilDoubleArrayPrint(file, next_line, (double*)p_tan_arr, n_point * 3); break; case PRO_ENT_B_SPLINE: err = ProBsplinedataGet(p_curve_data, °ree, &p_par_arr, &p_weight_arr, &p_pnt_arr, &n_knots, &n_point); TEST_CALL_REPORT("ProBsplinedataGet()", "ProUtilCurvedataPrint()", err, err != PRO_TK_NO_ERROR); fprintf(file,"%sType B_spline\n", str); fprintf(file,"%sDegree %d\n", str, degree); fprintf(file,"%sParameters\n", str); ProUtilDoubleArrayPrint(file, next_line, p_par_arr, n_knots); if (p_weight_arr != NULL) { fprintf(file,"%sWeights\n", str); ProUtilDoubleArrayPrint(file, next_line, p_weight_arr, n_point); } fprintf(file,"%sPoints\n", str); ProUtilDoubleArrayPrint(file, next_line, (double*)p_pnt_arr, n_point * 3); break; case PRO_ENT_CMP_CRV: err = ProCompositeCurvedataGet(p_curve_data, &p_comp_arr); TEST_CALL_REPORT("ProCompositeCurvedataGet()", "ProUtilCurvedataPrint()", err, err != PRO_TK_NO_ERROR); err = ProArraySizeGet((ProArray)p_comp_arr, &n_comp); if (err != PRO_TK_NO_ERROR) break; fprintf(file,"%sType Composite\n", str); fprintf(file,"%sComponents [%d]\n", str, n_comp); for (i=0; i