/*====================================================================*\ FILE : TestGeomdata.c PURPOSE : Test functions for Pro/TOOLKIT Geometry HISTORY.. DATE BUILD AUTHOR MODIFICATIONS h-01-14 Pavel $$1 Created 20-Jun-97 H-03-15 Pavel $$2 Updated 30-Jun-97 H-03-15 Pavel $$3 Fixed bug 01-Jul-97 H-03-16 Pavel $$4 Added new tests 10-Jul-97 H-03-16 Pavel $$5 Fixed bug 11-Aug-97 H-03-18 Alexey $$6 Bug fixed 07-Oct-97 H-03-27 Pavel $$7 More function tested 04-Dec-97 H-03-31+ AEY $$8 Updated in accordance to changes in declaration of uv_points in ProEdgedata structure. 02-Dec-97 H-03-35 Pavel $$9 added edge creation type 08-Jan-98 H-03-35+ AEY $$10 Fixed uv-curve edge representation in ProUtilEdgedataCopy(). 28-Feb-98 H-03-40 Pavel $$11 More updates 01-Oct-98 I-01-23 Alexey $$12 Add tests for ProDatumdataget, ProCurvedataMemoryFree and ProEllipsedataGet 09-Nov-98 I-01-26 Pavel $$13 Fixed bug in ProUtilCurvedataCopy, ProUtilEdgedataCopy 15-Nov-98 I-01-26 Alexey $$14 Fixed bug in ProUtilEdgedataCopy 01-Jun-99 I-03-12 mka $$15 Delete unused variable \*====================================================================*/ /*--------------------------------------------------------------------*\ Pro/TOOLKIT includes \*--------------------------------------------------------------------*/ #include #include #include #include #include #include #include /*--------------------------------------------------------------------*\ Application includes \*--------------------------------------------------------------------*/ #include "TestError.h" #include "UtilString.h" ProError ProUtilCurvedataCopy(ProCurvedata *c_in, ProCurvedata *c_out); void ProTestEdgeCreationTypeGet (int *creation_type); ProError ProUtilArrayCopy( ProArray array_from, ProArray *array_to, int obj_size) { ProError err; int n; err = ProArraySizeGet(array_from, &n); TEST_CALL_REPORT("ProArraySizeGet()", "ProUtilArrayCopy()", err, err != PRO_TK_NO_ERROR); if (err == PRO_TK_NO_ERROR) { err = ProArrayAlloc(n, obj_size, 1, array_to); TEST_CALL_REPORT("ProArrayAlloc()", "ProUtilArrayCopy()", err, err != PRO_TK_NO_ERROR); if (err == PRO_TK_NO_ERROR) memcpy(*array_to, array_from, obj_size*n); } return (PRO_TK_NO_ERROR); } /*====================================================================*\ FUNCTION : ProUtilSurfaceshapedataCopy() PURPOSE : copy one ProSurfaceshapedata struct to another \*====================================================================*/ ProError ProUtilSurfaceshapedataCopy( ProSrftype s_type, ProSurfaceshapedata *s_in, /* In : input struct*/ ProSurfaceshapedata *s_out) /* Out : output struct */ { ProVector e1, e2, e3, *p_u_t_arr, *p_v_t_arr, *p_uvd_arr; ProVector *p_new_u_t_arr, *p_new_v_t_arr, *p_new_uvd_arr; Pro3dPnt origin, *p_arr, *p_new_arr; double rad1, rad2, alpha, *p_u_arr, *p_v_arr, *p_wg_arr; double *p_new_u_arr, *p_new_v_arr, *p_new_wg_arr; ProCurvedata cur1, cur2, new_cur1, new_cur2; int num_u, num_v, num_c_p, deg[2]; ProSplinedata pnt_spline, ctr_spline, tan_spline; ProSplinesrfdata splsrf; ProError err; ProSurfaceshapedata shape_data; ProCurvedata new_pnt_spline, new_ctr_spline, new_tan_spline; switch (s_type) { case PRO_SRF_PLANE: err = ProPlanedataGet( s_in, e1, e2, e3, origin); TEST_CALL_REPORT("ProPlanedataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProPlanedataInit( e1, e2, e3, origin, s_out); TEST_CALL_REPORT("ProPlanedataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; case PRO_SRF_CYL: err = ProCylinderdataGet( s_in, e1, e2, e3, origin, &rad1); TEST_CALL_REPORT("ProCylinderdataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProCylinderdataInit( e1, e2, e3, origin, rad1, s_out); TEST_CALL_REPORT("ProCylinderdataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; case PRO_SRF_CONE: err = ProConedataGet( s_in, e1, e2, e3, origin, &alpha); TEST_CALL_REPORT("ProConedataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProConedataInit( e1, e2, e3, origin, alpha, s_out); TEST_CALL_REPORT("ProConedataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; case PRO_SRF_TORUS: err = ProTorusdataGet( s_in, e1, e2, e3, origin, &rad1, &rad2); TEST_CALL_REPORT("ProTorusdataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProTorusdataInit( e1, e2, e3, origin, rad1, rad2, s_out); TEST_CALL_REPORT("ProTorusdataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; case PRO_SRF_SPL: err = ProSplinesrfdataGet( s_in, &p_u_arr, &p_v_arr, &p_arr, &p_u_t_arr, &p_v_t_arr, &p_uvd_arr, &num_u, &num_v); TEST_CALL_REPORT("ProSplinesrfdataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProUtilArrayCopy ((ProArray)p_u_arr, (ProArray*)&p_new_u_arr, sizeof (double)); err = ProUtilArrayCopy ((ProArray)p_v_arr, (ProArray*)&p_new_v_arr, sizeof (double)); err = ProUtilArrayCopy ((ProArray)p_arr, (ProArray*)&p_new_arr, sizeof (Pro3dPnt)); err = ProUtilArrayCopy ((ProArray)p_u_t_arr, (ProArray*)&p_new_u_t_arr, sizeof (Pro3dPnt)); err = ProUtilArrayCopy ((ProArray)p_v_t_arr, (ProArray*)&p_new_v_t_arr, sizeof (Pro3dPnt)); err = ProUtilArrayCopy ((ProArray)p_uvd_arr, (ProArray*)&p_new_uvd_arr, sizeof (Pro3dPnt)); err = ProSplinesrfdataInit( p_new_u_arr, p_new_v_arr, p_new_arr, p_new_u_t_arr, p_new_v_t_arr, p_new_uvd_arr, num_u, num_v, s_out); TEST_CALL_REPORT("ProSplinesrfdataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; case PRO_SRF_FIL: err = ProFilsrfdataGet( s_in, &pnt_spline, &ctr_spline, &tan_spline); TEST_CALL_REPORT("ProFilsrfdataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProUtilCurvedataCopy ((ProCurvedata*)&pnt_spline, &new_pnt_spline); err = ProUtilCurvedataCopy ((ProCurvedata*)&ctr_spline, &new_ctr_spline); err = ProUtilCurvedataCopy ((ProCurvedata*)&tan_spline, &new_tan_spline); err = ProFilsrfdataInit( (ProSplinedata*)&new_pnt_spline, (ProSplinedata*)&new_ctr_spline, (ProSplinedata*) &new_tan_spline, s_out); TEST_CALL_REPORT("ProFilsrfdataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; case PRO_SRF_RUL: err = ProRulsrfdataGet( s_in, e1, e2, e3, origin, &cur1, &cur2); TEST_CALL_REPORT("ProRulsrfdataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProUtilCurvedataCopy (&cur1, &new_cur1); err = ProUtilCurvedataCopy (&cur2, &new_cur2); err = ProRulsrfdataInit( e1, e2, e3, origin, &new_cur1, &new_cur2, s_out); TEST_CALL_REPORT("ProRulsrfdataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; case PRO_SRF_REV: err = ProSrfrevdataGet( s_in, e1, e2, e3, origin, &cur1); TEST_CALL_REPORT("ProSrfrevdataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProUtilCurvedataCopy (&cur1, &new_cur1); err = ProSrfrevdataInit( e1, e2, e3, origin, &new_cur1, s_out); TEST_CALL_REPORT("ProSrfrevdataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; case PRO_SRF_TABCYL: err = ProTabcyldataGet( s_in, e1, e2, e3, origin, &cur1); TEST_CALL_REPORT("ProTabcyldataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProUtilCurvedataCopy (&cur1, &new_cur1); err = ProTabcyldataInit( e1, e2, e3, origin, &new_cur1, s_out); TEST_CALL_REPORT("ProTabcyldataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; case PRO_SRF_B_SPL: err = ProBsplinesrfdataGet( s_in, deg, &p_u_arr, &p_v_arr, &p_wg_arr, &p_arr, &num_u, &num_v, &num_c_p); TEST_CALL_REPORT("ProBsplinesrfdataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProUtilArrayCopy ((ProArray)p_u_arr, (ProArray*)&p_new_u_arr, sizeof (double)); err = ProUtilArrayCopy ((ProArray)p_v_arr, (ProArray*)&p_new_v_arr, sizeof (double)); err = ProUtilArrayCopy ((ProArray)p_wg_arr, (ProArray*)&p_new_wg_arr, sizeof (double)); err = ProBsplinesrfdataInit( deg, p_u_arr, p_v_arr, p_wg_arr, p_arr, num_u, num_v, num_c_p, s_out); TEST_CALL_REPORT("ProBsplinesrfdataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; case PRO_SRF_CYL_SPL: err = ProCylsplsrfdataGet( s_in, e1, e2, e3, origin, &splsrf); TEST_CALL_REPORT("ProCylsplsrfdataGet()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); err = ProUtilSurfaceshapedataCopy (PRO_SRF_SPL, (ProSurfaceshapedata*)&splsrf, &shape_data); err = ProCylsplsrfdataInit( e1, e2, e3, origin, (ProSplinesrfdata*)&shape_data, s_out); TEST_CALL_REPORT("ProCylsplsrfdataInit()", "ProUtilSurfaceshapedataCopy()", err, err != PRO_TK_NO_ERROR); break; default: ProUtilMsgPrint("gen", "TEST %0s", "Unknown surface type"); fprintf(stderr, "Copy: Unknown surface type %d\n", s_type); s_out[0] = s_in[0]; break; } return (err); } /*====================================================================*\ FUNCTION : ProUtilContourdataCopy() PURPOSE : copy contour array using different functions \*====================================================================*/ ProError ProUtilContourdataCopy( ProContourdata **p_c_array) /* In, Out : contourdata array */ { ProError err; ProContourdata *p_new_array, *p_c_data; int i, n, *p_edge_arr, *p_new_edge_arr; ProContourTraversal trav; err = ProArrayAlloc(0, sizeof(ProContourdata), 1, (ProArray*)&p_new_array); TEST_CALL_REPORT("ProArrayAlloc()", "ProUtilContourdataCopy()", err, err != PRO_TK_NO_ERROR); err = ProArraySizeGet((ProArray)*p_c_array, &n); TEST_CALL_REPORT("ProArraySizeGet()", "ProUtilContourdataCopy()", err, err != PRO_TK_NO_ERROR); for (i=0; i