Integration of OCCT 6.5.0 from SVN
[occt.git] / src / Xw / Xw_get_width_index.cxx
CommitLineData
7fd59977 1
2#include <Xw_Extension.h>
3
4 /* ifdef then trace on */
5#ifdef TRACE
6#define TRACE_GET_WIDTH_INDEX
7#endif
8
9/*
10 XW_STATUS Xw_get_width_index(awidthmap,width,index):
11
12 XW_EXT_WIDTHMAP *awidthmap Widthmap extension structure
13 float width ; Line Width in MM
14 int *index ; Return Width index 0 >= x < MAXWIDTH
15
16 Gets the nearest width index from width.
17
18 Returns XW_ERROR if BadWidth Index or width is not defined
19 Returns XW_SUCCESS if Successful
20
21*/
22
23#ifdef XW_PROTOTYPE
24XW_STATUS Xw_get_width_index(void *awidthmap,float width,int *index)
25#else
26XW_STATUS Xw_get_width_index(awidthmap,width,index)
27void *awidthmap ;
28float width ;
29int *index ;
30#endif /*XW_PROTOTYPE*/
31{
32XW_EXT_WIDTHMAP *pwidthmap = (XW_EXT_WIDTHMAP*)awidthmap ;
33XW_STATUS status = XW_ERROR ;
34Screen *screen ;
35int i,j,k,pwidth ;
36
37 if( !pwidthmap ) {
38 /*ERROR*Bad EXT_WIDTHMAP Address*/
39 Xw_set_error( 53,"Xw_get_width_index",pwidthmap ) ;
40 return( XW_ERROR ) ;
41 }
42
43 screen = ScreenOfDisplay(_WDISPLAY,DefaultScreen(_WDISPLAY)) ;
44
45 pwidth = (int) (0.5 + width * (float)HeightOfScreen(screen)/
46 (float)HeightMMOfScreen(screen)) ;
47
48 pwidth = (pwidth) ? pwidth : 1 ;
49
50 for( i=j=k=0 ; i<pwidthmap->maxwidth ; i++ ) {
51 if( pwidthmap->widths[i] ) {
52 if( pwidth == pwidthmap->widths[i] ) break;
53 else if( abs(pwidth - pwidthmap->widths[i]) <
54 abs(pwidth - pwidthmap->widths[k]) ) k = i;
55 } else if( !j ) j = i ;
56 }
57
58 if( i<pwidthmap->maxwidth ) {
59 *index = i ;
60 status = XW_SUCCESS ;
61 } else if( j > 0 ) {
62 *index = j ;
63 status = Xw_def_width (pwidthmap,j,width) ;
64 } else {
65 *index = k ;
66 status = XW_SUCCESS ;
67 }
68
69#ifdef TRACE_GET_WIDTH_INDEX
70if( Xw_get_trace() > 1 ) {
71 printf(" %d = Xw_get_width_index(%lx,%f,%d) is %d\n",
72 status,(long ) pwidthmap,width,*index,pwidthmap->widths[*index]) ;
73}
74#endif
75
76 return( status ) ;
77}