/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*---------------------- Pro/Toolkit Includes ------------------------*/ #include <ProToolkit.h> #include <ProPlotdriver.h> #include <ProArray.h> #include <ProColor.h> #include <PTApplsUnicodeUtils.h> #include <ProMessage.h> #include <ProUtil.h> /*---------------------- Application Includes ------------------------*/ #include <TestError.h> #include <string.h> /*---------------------- Function Prototypes -------------------------*/ ProError user_demo_line (); ProError user_demo_text (); ProError user_demo_circle (); ProError user_demo_arc (); ProError user_demo_polyline (); ProError user_demo_filled_poly (); static FILE *demo_output; /*===========================================================*\ ProDriverExecute call \*===========================================================*/ ProError user_plot(FILE *fp, char *driver_name) { ProError status; ProName *type_list; ProAppData data; ProLine app_name; demo_output = fp; ProStringToWstring(app_name, driver_name); data = (ProAppData) &app_name; /*-----------------------------------------------------------*\ Declare the plot format "demo". \*-----------------------------------------------------------*/ status = ProPlotdriverInterfaceCreate (L"demo"); /*-----------------------------------------------------------*\ Make "demo" valid for Drawing mode. \*-----------------------------------------------------------*/ status = ProArrayAlloc(2, sizeof(ProName), 1, (ProArray*) &type_list); ProStringToWstring(type_list[0], "DRW"); ProStringToWstring(type_list[1], ""); status = ProPlotdriverInterfaceobjectsSet (L"demo", type_list); /*-----------------------------------------------------------*\ Bind the functions user_demo*() to the primitives for the format "demo". \*-----------------------------------------------------------*/ status = ProPlotdriverLinefunctionSet(L"demo", user_demo_line); status = ProPlotdriverTextfunctionSet(L"demo", user_demo_text); status = ProPlotdriverCirclefunctionSet(L"demo", user_demo_circle); status = ProPlotdriverArcfunctionSet(L"demo", user_demo_arc); status = ProPlotdriverPolylinefunctionSet(L"demo", user_demo_polyline); status = ProPlotdriverPolygonfunctionSet(L"demo", user_demo_filled_poly); /*-----------------------------------------------------------*\ Invoke the plot. \*-----------------------------------------------------------*/ status = ProPlotdriverExecute (L"demo", data); ERROR_CHECK("user_plot","ProPlotdriverExecute",(status != PRO_TK_NO_ERROR)); demo_output = NULL; return status; } /*===========================================================*\ Bound function for plotting a LINE in the format "demo". \*===========================================================*/ ProError user_demo_line (data, point1, point2, color) ProAppData data; double point1[3], point2[3]; int color; { ProLine *app_name = (ProLine *)data; ProTKFprintf (demo_output, "%ws: LINE..\n", app_name); ProTKFprintf (demo_output," point1 = %f, %f\n", point1[0], point1[1]); ProTKFprintf (demo_output," point2 = %f, %f\n", point2[0], point2[1]); ProTKFprintf (demo_output," color = %d\n", color); return PRO_TK_NO_ERROR; } /*===========================================================*\ Bound function for plotting a TEXT item in the format "demo". \*===========================================================*/ ProError user_demo_text (data, point, text, size, angle, slant_angle, width_factor, dummy, color) ProAppData data; double point[3]; wchar_t *text; double size, angle, slant_angle, width_factor; int dummy, color; { char str[PRO_LINE_SIZE]; ProLine *app_name = (ProLine *)data; ProTKFprintf (demo_output, "%ws: TEXT..\n", app_name); ProTKFprintf (demo_output," point = %f, %f\n", point[0], point[1]); ProTKFprintf (demo_output," text = %s\n", ProWstringToString (str, text)); ProTKFprintf (demo_output," size = %f\n", size); ProTKFprintf (demo_output," angle = %f\n", angle); ProTKFprintf (demo_output," slant = %f\n", slant_angle); ProTKFprintf (demo_output," width = %f\n", width_factor); ProTKFprintf (demo_output," color = %d\n", color); return PRO_TK_NO_ERROR; } /*===========================================================*\ Bound function for plotting a CIRCLE in the format "demo" \*===========================================================*/ ProError user_demo_circle (data, center, radius, color) ProAppData data; double center[3], radius; int color; { ProLine *app_name = (ProLine *)data; ProTKFprintf (demo_output, "%ws: CIRCLE..\n, app_name"); ProTKFprintf (demo_output," center = %f, %f\n", center[0], center[1]); ProTKFprintf (demo_output," radius = %f\n", radius); ProTKFprintf (demo_output," color = %d\n", color); return PRO_TK_NO_ERROR; } /*===========================================================*\ Bound function for plotting an ARC in the format "demo" \*===========================================================*/ ProError user_demo_arc (data, center, radius, point1, point2, t0, t1, color) ProAppData data; double center[3], radius, point1[3], point2[3], t0, t1; int color; { ProLine *app_name = (ProLine *)data; ProTKFprintf (demo_output, "%ws: ARC..\n", app_name); ProTKFprintf (demo_output," center = %f, %f\n", center[0], center[1]); ProTKFprintf (demo_output," radius = %f\n", radius); ProTKFprintf (demo_output," point1 = %f, %ff\n", point1[0], point1[1]); ProTKFprintf (demo_output," point2 = %f, %ff\n", point2[0], point2[1]); ProTKFprintf (demo_output," t1 = %f\n", t1); ProTKFprintf (demo_output," color = %d\n", color); return PRO_TK_NO_ERROR; } /*===========================================================*\ Bound function for plotting a POLYLINE in the format "demo" \*===========================================================*/ ProError user_demo_polyline (data, n_pts, array, color) ProAppData data; int n_pts; double array[][3]; int color; { int p; ProLine *app_name = (ProLine *)data; ProTKFprintf (demo_output, "%ws: POLYLINE..\n", app_name); for (p = 0; p < n_pts; p++) ProTKFprintf (demo_output," Point %d = %f, %f\n", p, array[p][0], array[p][1]); ProTKFprintf (demo_output," color = %d\n", color); return PRO_TK_NO_ERROR; } /*===========================================================*\ Bound function for plotting a FILLED POLYGON in the format "demo" \*===========================================================*/ ProError user_demo_filled_poly (data, n_pts, array, color) ProAppData data; int n_pts; double array[][3]; int color; { int p; ProLine *app_name = (ProLine *)data; ProTKFprintf (demo_output, "%ws: FILLED POLY..\n", app_name); for (p = 0; p < n_pts; p++) ProTKFprintf (demo_output," Point %d = %f, %f\n", p, array[p][0], array[p][1]); ProTKFprintf (demo_output," color = %d\n", color); return PRO_TK_NO_ERROR; }