0023830: BRepExtrema_DistShapeShape does not find intersection of face with edge
[occt.git] / src / Xw / Xw_def_markmap.cxx
1 // Copyright (c) 1999-2012 OPEN CASCADE SAS
2 //
3 // The content of this file is subject to the Open CASCADE Technology Public
4 // License Version 6.5 (the "License"). You may not use the content of this file
5 // except in compliance with the License. Please obtain a copy of the License
6 // at http://www.opencascade.org and read it completely before using this file.
7 //
8 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
9 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
10 //
11 // The Original Code and all software distributed under the License is
12 // distributed on an "AS IS" basis, without warranty of any kind, and the
13 // Initial Developer hereby disclaims all such warranties, including without
14 // limitation, any warranties of merchantability, fitness for a particular
15 // purpose or non-infringement. Please see the License for the specific terms
16 // and conditions governing the rights and limitations under the License.
17
18
19 #include <Xw_Extension.h>
20
21 /* ifdef then trace on */
22 #ifdef TRACE
23 #define TRACE_DEF_MARKMAP
24 #endif
25
26 /*
27    XW_EXT_MARKMAP* Xw_def_markmap(adisplay,nmark):
28    XW_EXT_DISPLAY *adisplay Extended Display structure
29
30    int nmark            Number of marker cells to be allocated
31
32         Create a markmap extension 
33         allocate the marker cells in the markmap as if possible
34         depending of the MAXMARKER define .
35
36         Returns Markmap extension address if successuful
37                 or NULL if ERROR
38
39 */
40
41 #ifdef XW_PROTOTYPE
42 void* Xw_def_markmap (void* adisplay,int nmark)
43 #else
44 void* Xw_def_markmap (adisplay,nmark)
45 void *adisplay ;
46 int nmark ;
47 #endif /*XW_PROTOTYPE*/
48 {
49 XW_EXT_DISPLAY *pdisplay = (XW_EXT_DISPLAY*)adisplay ;
50 XW_EXT_MARKMAP *pmarkmap = NULL ;
51 //int i ;
52
53     if( !Xw_isdefine_display(pdisplay) ) {
54         /*ERROR*Bad EXT_DISPLAY Address*/
55         Xw_set_error(96,"Xw_def_markmap",pdisplay) ;
56         return (NULL) ;
57     }
58
59     if( !(pmarkmap = Xw_add_markmap_structure(sizeof(XW_EXT_MARKMAP))) ) 
60                                                                 return (NULL) ;
61
62     if( nmark <= 0 ) nmark = MAXMARKER ;
63
64     pmarkmap->connexion = pdisplay ;
65     pmarkmap->maxmarker = min(nmark,MAXMARKER) ; 
66
67 #ifdef TRACE_DEF_MARKMAP
68 if( Xw_get_trace() ) {
69     printf(" %lx = Xw_def_markmap(%lx,%d)\n", (long ) pmarkmap,(long ) adisplay,nmark) ;
70 }
71 #endif
72
73     return (pmarkmap);
74 }
75
76 static XW_EXT_MARKMAP *PmarkmapList =NULL ;
77
78 #ifdef XW_PROTOTYPE
79 XW_EXT_MARKMAP* Xw_add_markmap_structure(int size)
80 #else
81 XW_EXT_MARKMAP* Xw_add_markmap_structure(size)
82 int size ;
83 #endif /*XW_PROTOTYPE*/
84 /*
85         Create and Insert one Extended markmap structure in the
86         EXtended markmap List
87
88         returns Extended markmap address if successful
89                 or NULL if Bad Allocation
90 */
91 {
92 XW_EXT_MARKMAP *pmarkmap = (XW_EXT_MARKMAP*) Xw_malloc(size) ;
93 int i ;
94
95         if( pmarkmap ) {
96             pmarkmap->type = MARKMAP_TYPE ;
97             pmarkmap->link = PmarkmapList ;
98             PmarkmapList = pmarkmap ;
99             pmarkmap->connexion = NULL ;
100             pmarkmap->maxmarker = 0 ;
101             pmarkmap->maxwindow = 0 ;
102             for( i=0 ; i<MAXMARKER ; i++ ) {
103                 pmarkmap->marks[i] = 0 ;
104                 pmarkmap->npoint[i] = 0 ;
105                 pmarkmap->width[i] = 0 ;
106                 pmarkmap->height[i] = 0 ;
107             }
108         } else {
109             /*EXT_MARKMAP Allocation failed*/
110             Xw_set_error(12,"Xw_add_markmap_structure",0) ;
111         }
112
113         return (pmarkmap) ;
114 }
115
116 #ifdef XW_PROTOTYPE
117 XW_STATUS Xw_close_markmap(void* amarkmap)
118 #else
119 XW_STATUS Xw_close_markmap(amarkmap)
120 void* amarkmap ;
121 #endif /*XW_PROTOTYPE*/
122 {
123 XW_EXT_MARKMAP *pmarkmap = (XW_EXT_MARKMAP*) amarkmap ;
124 XW_STATUS status ;
125
126     if( !Xw_isdefine_markmap(pmarkmap) ) {
127         /*Bad EXT_MARKMAP Address*/
128         Xw_set_error(46,"Xw_close_markmap",pmarkmap) ;
129         return (XW_ERROR) ;
130     }
131
132     status = Xw_del_markmap_structure(pmarkmap) ;
133
134 #ifdef TRACE_DEF_MARKMAP
135 if( Xw_get_trace() ) {
136     printf(" %d = Xw_close_markmap(%lx)\n",status,(long ) pmarkmap) ;
137 }
138 #endif
139
140     return (status) ;
141 }
142
143 #ifdef XW_PROTOTYPE
144 XW_STATUS Xw_del_markmap_structure(XW_EXT_MARKMAP* amarkmap)
145 #else
146 XW_STATUS Xw_del_markmap_structure(amarkmap)
147 XW_EXT_MARKMAP *amarkmap;
148 #endif /*XW_PROTOTYPE*/
149 /*
150         Remove the Extended markmap address from the Extended List
151
152         returns ERROR if the markmap address is not Found in the list
153         returns SUCCESS if successful
154 */
155 {
156 XW_EXT_MARKMAP *pmarkmap = PmarkmapList ;
157 int i ;
158
159     if( !amarkmap ) return (XW_ERROR) ;
160
161     if( amarkmap->maxwindow ) {
162         return (XW_ERROR) ;
163     } else {
164         for( i=0 ; i<MAXMARKER ; i++) {
165             if( amarkmap->marks[i] ) {
166                 XFreePixmap(_MDISPLAY,amarkmap->marks[i]) ;
167 //              amarkmap->marks[i] = NULL;
168                 amarkmap->marks[i] = 0;
169             }
170             if( amarkmap->npoint[i] > 0 ) {
171                 Xw_free(amarkmap->spoint[i]);
172                 Xw_free(amarkmap->xpoint[i]);
173                 Xw_free(amarkmap->ypoint[i]);
174                 amarkmap->npoint[i] = 0;
175             }
176         }
177
178         if( amarkmap == pmarkmap ) {
179             PmarkmapList = (XW_EXT_MARKMAP*) amarkmap->link ;
180         } else {
181             for( ; pmarkmap ; pmarkmap = (XW_EXT_MARKMAP*) pmarkmap->link ) {
182                 if( pmarkmap->link == amarkmap ) {
183                     pmarkmap->link = amarkmap->link ;
184                     break ;
185                 }
186             }
187         }
188         Xw_free(amarkmap) ;
189     }
190     return (XW_SUCCESS) ;
191 }