/********************************************************************/ /* Copyright (c) 2017 System fugen G.K. and Yuzi Mizuno */ /* All rights reserved. */ /********************************************************************/ typedef int (*gplFunc)(int*,double*, double*); //#define min(a,b) (((a) <= (b)) ? (a) : (b)) // DIMENSION OF WK1 IS WK1(4*K*K+3*K) AS SPECIFIED IN COMMENT // , BUT THE DECLARATION IS WK1(K,3) TO AVOID COMPILE ERROR // AND TO UTILIZE THE AREA. // SUBROUTINE TO DRAW LINE // ***** POLYLINE DRAWING (GPL) VERSION ***** // *** INPUT * // GPL....IS A SUBROUTINE NAME TO DRAW POLYLINE. THE eING // SEQUENCE IS AS: // CALL GPL(N,X,Y), WHERE N:NUM OF POINT, X(N) AND // Y(N) ARE THEIR COORDINATES, (X(I) Y(I)) FOR 1<=I<=N. // NPY.....NUMBER OF POINT TO BE DRAWN FOR THE LENGTH WIND(4) // ( FOR THE WINDOW LENGTH OF Y-COORDINATE ) . // MINIMUM NPY =0, IN THIS CASE ONLY ONE SPAN BETWEEN KNOTS. // WIND(4)..WINDOW SIZE TO CLIP: // ( WIND(1),(2) ) IS THE CENTER (X,Y) OF THE WINDOW, AND // ( WIND(3),(4) ) IS ( WIDTH,HEIGHT ) OF THE WINDOW. // WIND(3)<=0. INDICATES CLIPPING IS NOT NECESSARY. // EVEN WHEN WIND(3)<=0. WIND(4) IS NECESSARY TO INPUT FOR NPY. // KLINI..SPECIFIES HOW INPUT DATA CORRESPONDS TO SCREEN COORDINATE; // = 1 : (T,RCOEFX) IS (X,Y) // = 2 : (RCOEFX,T) IS (X,Y) // OTHERWISE : (RCOEFX,RCOEFY) IS (X,Y) OF THE SCREEN. // WHEN KLIN=1,2 RCOEFY IS DUMMY ARGUMENT, NOT USED. // K,N,T(N+K),RCOEFX(N),RCOEFY(N)......ARE B-REP TO DRAW: // ORDER, B-REP DIMENSION, KNOT VECTOR, AND B-COEFFICIENTS. // NWK2.....SPECIFIES LENGTH OF WK2 AS WK2(NWK2,2) // NWK2 MUST BE .GE. N/2 AND RECOMMENDED .GE.N , // USED TO PUT POSITIONAL DATA TO SUBROUTINE GPL. // *** WORK * // WK1(4*K*K+3*K),WK2(NWK2,2),RW(N) void bldrwg_(gplFunc gpl, int npy, const double *wind, int klini, int k, int n, const double *t,const double *rcoefx, const double *rcoefy, int nwk2, double *wk1, double *wk2, double *rw);