/*
Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*--------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*--------------------------------------------------------------------*/
#include <ProToolkit.h>
#include <ProArray.h>
#include <ProSurfacedata.h>
#include <ProEdgedata.h>
#include <ProQuiltdata.h>
#include <ProDatumdata.h>
#include <ProUtil.h>
/*--------------------------------------------------------------------*\
Application includes
\*--------------------------------------------------------------------*/
#include "TestError.h"
#include "UtilString.h"
#include <UtilMessage.h>
#include <ProTKRunTime.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 = PRO_TK_NO_ERROR;
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");
ProTKFprintf(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 = PRO_TK_GENERAL_ERROR;
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<n; i++)
{
err = ProContourdataAlloc(&p_c_data);
TEST_CALL_REPORT("ProContourdataAlloc()",
"ProUtilContourdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProContourdataGet(p_c_array[0]+i, &trav);
TEST_CALL_REPORT("ProContourdataGet()",
"ProUtilContourdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProContourdataInit(trav, p_c_data);
TEST_CALL_REPORT("ProContourdataInit()",
"ProUtilContourdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProContourdataEdgeIdArrayGet(p_c_array[0]+i, &p_edge_arr);
TEST_CALL_REPORT("ProContourdataEdgeIdArrayGet()",
"ProUtilContourdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProUtilArrayCopy ((ProArray)p_edge_arr,
(ProArray*)&p_new_edge_arr, sizeof (int));
err = ProContourdataEdgeIdArraySet(p_c_data, p_new_edge_arr);
TEST_CALL_REPORT("ProContourdataEdgeIdArraySet()",
"ProUtilContourdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProArrayObjectAdd((ProArray*)&p_new_array, PRO_VALUE_UNUSED,
1, p_c_data);
TEST_CALL_REPORT("ProArrayObjectAdd()",
"ProUtilContourdataCopy()", err, err != PRO_TK_NO_ERROR);
memset(p_c_data, '\0', sizeof(ProContourdata));
err = ProContourdataFree(p_c_data);
TEST_CALL_REPORT("ProContourdataFree()",
"ProUtilContourdataCopy()", err, err != PRO_TK_NO_ERROR);
}
err = ProArrayFree((ProArray*)p_c_array);
TEST_CALL_REPORT("ProArrayFree()",
"ProUtilContourdataCopy()", err, err != PRO_TK_NO_ERROR);
*p_c_array = p_new_array;
return (err);
}
/*====================================================================*\
FUNCTION : ProUtilSurfacedataCopy()
PURPOSE : copy surfacedata using different functions
\*====================================================================*/
ProError ProUtilSurfacedataCopy(
ProSurfacedata **p_s_data) /* In, Out : surface data */
{
ProError err;
ProSurfacedata *surf_data;
ProSrftype srftype;
ProUvParam uvpar1, uvpar2;
ProSurfaceOrient s_orient;
ProSurfaceshapedata s_shapedata, s_shapedata_new;
ProContourdata *p_cont_arr;
int s_id;
err = ProSurfacedataAlloc( &surf_data);
TEST_CALL_REPORT("ProSurfacedataAlloc()",
"ProUtilSurfacedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProSurfacedataGet(*p_s_data, &srftype, uvpar1, uvpar2, &s_orient,
&s_shapedata, &s_id);
TEST_CALL_REPORT("ProSurfacedataGet()",
"ProUtilSurfacedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProUtilSurfaceshapedataCopy(srftype, &s_shapedata, &s_shapedata_new);
err = ProSurfacedataInit(srftype, uvpar1, uvpar2, s_orient,
&s_shapedata_new, s_id, surf_data);
TEST_CALL_REPORT("ProSurfacedataInit()",
"ProUtilSurfacedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProSurfacedataContourArrayGet( *p_s_data, &p_cont_arr);
TEST_CALL_REPORT("ProSurfacedataContourArrayGet()",
"ProUtilSurfacedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProUtilContourdataCopy(&p_cont_arr);
err = ProSurfacedataContourArraySet( surf_data, p_cont_arr);
TEST_CALL_REPORT("ProSurfacedataContourArraySet()",
"ProUtilSurfacedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProArrayFree((ProArray*)&p_cont_arr);
TEST_CALL_REPORT("ProArrayFree()",
"ProUtilSurfacedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProSurfacedataFree(*p_s_data);
TEST_CALL_REPORT("ProSurfacedataFree()",
"ProUtilSurfacedataCopy()", err, err != PRO_TK_NO_ERROR);
*p_s_data = surf_data;
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
FUNCTION : ProUtilCurvedataCopy()
PURPOSE : copy curvedata using different functions
\*====================================================================*/
ProError ProUtilComponentArrayCopy(
ProComponentCurvedata *p_comp_arr,
ProComponentCurvedata **new_comp_arr)
{
ProError err;
int n_comp, i;
ProComponentCurvedata *p_curve_data;
ProCurveDir dir;
ProCurvedata curve_data, new_data;
err = ProArraySizeGet((ProArray)p_comp_arr, &n_comp);
TEST_CALL_REPORT("ProArraySizeGet()",
"ProUtilComponentArrayCopy()", err, err != PRO_TK_NO_ERROR);
err = ProArrayAlloc(0, sizeof(ProComponentCurvedata), 1,
(ProArray*)new_comp_arr);
for (i=0; i<n_comp; i++)
{
err = ProComponentCurvedataAlloc(&p_curve_data);
TEST_CALL_REPORT("ProComponentCurvedataAlloc()",
"ProUtilComponentArrayCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProComponentCurvedataGet(&p_comp_arr[i], &curve_data, &dir);
TEST_CALL_REPORT("ProComponentCurvedataGet()",
"ProUtilComponentArrayCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProUtilCurvedataCopy(&curve_data, &new_data);
err = ProComponentCurvedataInit(&new_data, dir, p_curve_data);
TEST_CALL_REPORT("ProComponentCurvedataInit()",
"ProUtilComponentArrayCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProArrayObjectAdd((ProArray*)new_comp_arr, PRO_VALUE_UNUSED,
1, p_curve_data);
if (err != PRO_TK_NO_ERROR)
break;
#if 1
memset(p_curve_data, '\0', sizeof(ProComponentCurvedata));
#endif
err = ProComponentCurvedataFree(p_curve_data);
TEST_CALL_REPORT("ProComponentCurvedataFree()",
"ProUtilComponentArrayCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
}
return (err);
}
/*====================================================================*\
FUNCTION : ProUtilCurvedataCopy()
PURPOSE : copy curvedata using different functions
\*====================================================================*/
ProError ProUtilCurvedataCopy(
ProCurvedata *c_in,
ProCurvedata *c_out) /* In, out : edge data */
{
int n_point, n_knots, degree;
double *p_par_arr, *p_weight_arr, *p_par_arr2,
*p_weight_arr2, st_a, en_a, rad;
double d1, d2, d3, d4;
ProError err;
ProEnttype c_type;
Pro3dPnt p1, p2;
ProVector v1, v2;
ProPoint3d *p_pnt_arr, *p_tan_arr, *p_pnt_arr2, *p_tan_arr2;
ProComponentCurvedata *p_comp_arr, *new_comp_arr;
err = ProCurvedataTypeGet(c_in, &c_type);
TEST_CALL_REPORT("ProCurvedataTypeGet()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
switch(c_type)
{
case PRO_ENT_POINT:
err = ProPointdataGet(c_in, p1);
TEST_CALL_REPORT("ProPointdataGet()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProPointdataInit(p1, c_out);
TEST_CALL_REPORT("ProPointdataInit()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
break;
case PRO_ENT_LINE:
err = ProLinedataGet(c_in, p1, p2);
TEST_CALL_REPORT("ProLinedataGet()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProLinedataInit(p1, p2, c_out);
TEST_CALL_REPORT("ProLinedataInit()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
break;
case PRO_ENT_ARC:
err = ProArcdataGet(c_in, v1, v2, p1, &st_a, &en_a, &rad);
TEST_CALL_REPORT("ProArcdataGet()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProArcdataInit(v1, v2, p1, st_a, en_a, rad, c_out);
TEST_CALL_REPORT("ProArcdataInit()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
break;
case PRO_ENT_SPLINE:
err = ProSplinedataGet(c_in, &p_par_arr, &p_pnt_arr, &p_tan_arr,
&n_point);
TEST_CALL_REPORT("ProSplinedataGet()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProUtilArrayCopy((ProArray)p_par_arr, (ProArray*)&p_par_arr2,
sizeof(p_par_arr[0]));
TEST_CALL_REPORT("ProUtilArrayCopy()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProUtilArrayCopy((ProArray)p_pnt_arr, (ProArray*)&p_pnt_arr2,
sizeof(p_pnt_arr[0]));
TEST_CALL_REPORT("ProUtilArrayCopy()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProUtilArrayCopy((ProArray)p_tan_arr, (ProArray*)&p_tan_arr2,
sizeof(p_tan_arr[0]));
TEST_CALL_REPORT("ProUtilArrayCopy()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProSplinedataInit(p_par_arr2, p_pnt_arr2, p_tan_arr2, n_point,
c_out);
TEST_CALL_REPORT("ProSplinedataInit()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
break;
case PRO_ENT_B_SPLINE:
err = ProBsplinedataGet(c_in, °ree, &p_par_arr, &p_weight_arr,
&p_pnt_arr, &n_knots, &n_point);
TEST_CALL_REPORT("ProBsplinedataGet()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProUtilArrayCopy((ProArray)p_pnt_arr, (ProArray*)&p_pnt_arr2,
sizeof(p_pnt_arr[0]));
TEST_CALL_REPORT("ProUtilArrayCopy()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProUtilArrayCopy((ProArray)p_par_arr, (ProArray*)&p_par_arr2,
sizeof(p_par_arr[0]));
TEST_CALL_REPORT("ProUtilArrayCopy()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
if (p_weight_arr != NULL)
{
err = ProUtilArrayCopy((ProArray)p_weight_arr,
(ProArray*)&p_weight_arr2, sizeof(p_weight_arr[0]));
TEST_CALL_REPORT("ProUtilArrayCopy()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
}
else
p_weight_arr2 = NULL;
if (err != PRO_TK_NO_ERROR)
break;
err = ProBsplinedataInit(degree, p_par_arr2, p_weight_arr2, p_pnt_arr2,
n_knots, n_point, c_out);
TEST_CALL_REPORT("ProBsplinedataInit()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
break;
case PRO_ENT_CMP_CRV:
err = ProCompositeCurvedataGet(c_in, &p_comp_arr);
TEST_CALL_REPORT("ProCompositeCurvedataGet()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProUtilComponentArrayCopy(p_comp_arr, &new_comp_arr);
if (err != PRO_TK_NO_ERROR)
break;
err = ProCompositeCurvedataInit(new_comp_arr, c_out);
TEST_CALL_REPORT("ProCompositeCurvedataInit()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
break;
case PRO_ENT_ELLIPSE:
err = ProEllipsedataGet (c_in, p1, v1, v2, &d1, &d2, &d3, &d4);
TEST_CALL_REPORT("ProEllipsedataGet()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
break;
err = ProEllipsedataInit (p1, v1, v2, d1, d2, d3, d4, c_out);
TEST_CALL_REPORT("ProEllipsedataInit()",
"ProUtilCurvedataCopy()", err, err != PRO_TK_NO_ERROR);
break;
default:
ProUtilMsgPrint("gen", "TEST %0s", "Unknown curve type");
ProTKFprintf(stderr, "Copy: Unknown curve type %d \n", c_type);
c_out[0] = c_in[0];
break;
}
return (err);
}
/*====================================================================*\
FUNCTION : ProUtilEdgedataCopy()
PURPOSE : copy edgedata using different functions
\*====================================================================*/
ProError ProUtilEdgedataCopy(
ProEdgedata **pp_edge_data) /* In, out : edge data */
{
ProError err;
int edge_id;
int edge_surf_ids[2];
ProEdgeDir edge_dirs[2];
ProUvParam (*edge_uv_point_arr)[2], (*edge_uv_point_arr_new)[2];
ProCurvedata edge_uv_curve_0, edge_uv_curve_1;
ProCurvedata *p_edge_uv_curve[2];
ProCurvedata edge_xyz_curve;
ProEdgedata *p_edge_data_new;
ProCurvedata *p_edge_uv_curve_new[2]={NULL, NULL};
ProCurvedata *p_edge_xyz_curve_new;
ProEnttype curve_type;
p_edge_uv_curve[0] = &edge_uv_curve_0;
p_edge_uv_curve[1] = &edge_uv_curve_1;
err = ProEdgedataGet(*pp_edge_data,
&edge_id,
edge_surf_ids,
edge_dirs,
&edge_uv_point_arr,
p_edge_uv_curve,
&edge_xyz_curve);
TEST_CALL_REPORT("ProEdgedataGet()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProCurvedataTypeGet (p_edge_uv_curve[0], &curve_type);
TEST_CALL_REPORT("ProCurvedataTypeGet()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
if ((err == PRO_TK_NO_ERROR) && (curve_type != PRO_ENT_NONE))
{
err = ProCurvedataAlloc( &p_edge_uv_curve_new[0] );
TEST_CALL_REPORT("ProCurvedataAlloc()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProUtilCurvedataCopy( p_edge_uv_curve[0], p_edge_uv_curve_new[0]);
}
else
p_edge_uv_curve_new[0] = NULL;
err = ProCurvedataTypeGet (p_edge_uv_curve[1], &curve_type);
TEST_CALL_REPORT("ProCurvedataTypeGet()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
if ((err == PRO_TK_NO_ERROR) && (curve_type != PRO_ENT_NONE))
{
err = ProCurvedataAlloc( &p_edge_uv_curve_new[1] );
TEST_CALL_REPORT("ProCurvedataAlloc()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProUtilCurvedataCopy(p_edge_uv_curve[1], p_edge_uv_curve_new[1]);
}
else
p_edge_uv_curve_new[1] = NULL;
err = ProCurvedataTypeGet (&edge_xyz_curve, &curve_type);
TEST_CALL_REPORT("ProCurvedataTypeGet()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
if ((err == PRO_TK_NO_ERROR) && (curve_type != PRO_ENT_NONE))
{
err = ProCurvedataAlloc( &p_edge_xyz_curve_new);
TEST_CALL_REPORT("ProCurvedataAlloc()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProUtilCurvedataCopy(&edge_xyz_curve, p_edge_xyz_curve_new);
}
else
p_edge_xyz_curve_new = NULL;
err = ProEdgedataAlloc(&p_edge_data_new);
TEST_CALL_REPORT("ProEdgedataAlloc()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
if ( edge_uv_point_arr != NULL)
{
err = ProUtilArrayCopy((ProArray)edge_uv_point_arr,
(ProArray*)&edge_uv_point_arr_new, sizeof(ProUvParam)*2 );
}
else
edge_uv_point_arr_new = NULL;
err = ProEdgedataInit(edge_id, edge_surf_ids, edge_dirs,
edge_uv_point_arr,
(!p_edge_uv_curve_new[0]&&!p_edge_uv_curve_new[1]) ?
NULL : p_edge_uv_curve_new,
p_edge_xyz_curve_new,
p_edge_data_new );
TEST_CALL_REPORT("ProEdgedataInit()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
if (p_edge_xyz_curve_new != NULL)
{
err = ProCurvedataMemoryFree(p_edge_xyz_curve_new);
TEST_CALL_REPORT("ProCurvedataMemoryFree()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
}
if (p_edge_uv_curve_new[0] != NULL)
{
memset(p_edge_uv_curve_new[0], '\0', sizeof(ProCurvedata));
err = ProCurvedataFree(p_edge_uv_curve_new[0]);
TEST_CALL_REPORT("ProCurvedataFree()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
}
if (p_edge_uv_curve_new[1] != NULL)
{
err = ProCurvedataMemoryFree(p_edge_uv_curve_new[1]);
TEST_CALL_REPORT("ProCurvedataMemoryFree()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
}
err = ProEdgedataFree( *pp_edge_data);
TEST_CALL_REPORT("ProEdgedataFree()",
"ProUtilEdgedataCopy()", err, err != PRO_TK_NO_ERROR);
*pp_edge_data = p_edge_data_new;
return (err);
}
/*====================================================================*\
FUNCTION : ProUtilQuiltdataCopy()
PURPOSE : Copy quilt data using different commands
\*====================================================================*/
ProError ProUtilQuiltdataCopy(
ProQuiltdata **p_q_data) /* In, out - quilt data */
{
ProError err;
ProQuiltdata *quilt_data;
int quilt_id;
ProSurfacedata **p_surf_arr, **p_new_surf_arr;
err = ProQuiltdataAlloc( &quilt_data);
TEST_CALL_REPORT("ProQuiltdataAlloc()",
"ProUtilQuiltdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProQuiltdataGet(*p_q_data, &quilt_id);
TEST_CALL_REPORT("ProQuiltdataGet()",
"ProUtilQuiltdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProQuiltdataInit(quilt_id, quilt_data);
TEST_CALL_REPORT("ProQuiltdataInit()",
"ProUtilQuiltdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProQuiltdataSurfArrayGet(*p_q_data, &p_surf_arr);
TEST_CALL_REPORT("ProQuiltdataSurfArrayGet()",
"ProUtilQuiltdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProUtilArrayCopy ((ProArray)p_surf_arr, (ProArray*)&p_new_surf_arr,
sizeof (ProSurfacedata*));
err = ProQuiltdataSurfArraySet(quilt_data, p_new_surf_arr);
TEST_CALL_REPORT("ProQuiltdataSurfArraySet()",
"ProUtilQuiltdataCopy()", err, err != PRO_TK_NO_ERROR);
#if 1
memset( *p_q_data, '\0', sizeof(ProQuiltdata));
#endif
err = ProQuiltdataFree( *p_q_data);
TEST_CALL_REPORT("ProQuiltdataFree()",
"ProUtilQuiltdataCopy()", err, err != PRO_TK_NO_ERROR);
p_q_data[0] = quilt_data;
return (err);
}
/*====================================================================*\
FUNCTION : ProUtilDatumobjectCopy()
PURPOSE : Copy Datum object using different commands
\*====================================================================*/
ProError ProUtilDatumobjectCopy(
ProType datum_type,
ProDatumobject *p_object) /* In, out - Datum object */
{
ProDatumobject datum_object;
ProPlanedata planedata;
ProCsysdata csysdata;
ProCurvedata *p_curvedata, curvedata;
ProError err = PRO_TK_NO_ERROR;
memset(&datum_object, '\0', sizeof(datum_object));
switch (datum_type)
{
case PRO_CURVE:
err = ProCurvedataAlloc(&p_curvedata);
TEST_CALL_REPORT("ProCurvedataAlloc()",
"ProUtilDatumobjectCopy()", err, err != PRO_TK_NO_ERROR);
err = ProDatumCurvedataGet(p_object, p_curvedata);
TEST_CALL_REPORT("ProDatumCurvedataGet()",
"ProUtilDatumobjectCopy()", err, err != PRO_TK_NO_ERROR);
memset(&curvedata, '\0', sizeof(ProCurvedata));
err = ProUtilCurvedataCopy(p_curvedata, &curvedata);
err = ProCurvedataMemoryFree(p_curvedata);
TEST_CALL_REPORT("ProCurvedataMemoryFree()",
"ProUtilDatumobjectCopy()", err, err != PRO_TK_NO_ERROR);
err = ProDatumCurvedataInit(&curvedata, &datum_object);
TEST_CALL_REPORT("ProDatumCurvedataInit()",
"ProUtilDatumobjectCopy()", err, err != PRO_TK_NO_ERROR);
p_object[0] = datum_object;
break;
case PRO_CSYS:
err = ProDatumCsysdataGet(p_object, &csysdata);
TEST_CALL_REPORT("ProDatumCsysdataGet()",
"ProUtilDatumobjectCopy()", err, err != PRO_TK_NO_ERROR);
err = ProDatumCsysdataInit(&csysdata, &datum_object);
TEST_CALL_REPORT("ProDatumCsysdataInit()",
"ProUtilDatumobjectCopy()", err, err != PRO_TK_NO_ERROR);
p_object[0] = datum_object;
break;
case PRO_DATUM_PLANE:
err = ProDatumPlanedataGet(p_object, &planedata);
TEST_CALL_REPORT("ProDatumPlanedataGet()",
"ProUtilDatumobjectCopy()", err, err != PRO_TK_NO_ERROR);
err = ProDatumPlanedataInit(&planedata, &datum_object);
TEST_CALL_REPORT("ProDatumPlanedataInit()",
"ProUtilDatumobjectCopy()", err, err != PRO_TK_NO_ERROR);
p_object[0] = datum_object;
break;
default:
ProTKFprintf(stderr, "unsupported datum data %d\n",datum_type);
err = PRO_TK_GENERAL_ERROR;
break;
}
return (err);
}
/*====================================================================*\
FUNCTION : ProUtilDatumdataCopy()
PURPOSE : Copy Datum data using different commands
\*====================================================================*/
ProError ProUtilDatumdataCopy(
ProDatumdata **p_d_data) /* In, out - Datum data */
{
ProError err;
ProDatumdata *datum_data;
int datum_id;
ProType datum_type;
ProName w_name;
ProDatumobject datum_obj;
ProUtilCname name;
err = ProDatumdataAlloc( &datum_data);
TEST_CALL_REPORT("ProDatumdataAlloc()",
"ProUtilDatumdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProDatumdataGet(*p_d_data, &datum_id, &datum_type, w_name,
&datum_obj);
TEST_CALL_REPORT("ProDatumdataGet()",
"ProUtilDatumdataCopy()", err, err != PRO_TK_NO_ERROR);
ProWstringToString(name,w_name);
err = ProUtilDatumobjectCopy(datum_type, &datum_obj);
if (err == PRO_TK_NO_ERROR)
{
err = ProDatumdataInit(datum_id, datum_type, w_name, &datum_obj,
datum_data);
TEST_CALL_REPORT("ProDatumdataInit()",
"ProUtilDatumdataCopy()", err, err != PRO_TK_NO_ERROR);
err = ProDatumdataFree( *p_d_data);
TEST_CALL_REPORT("ProDatumdataFree()",
"ProUtilDatumdataCopy()", err, err != PRO_TK_NO_ERROR);
p_d_data[0] = datum_data;
}
return (err);
}