1 /****************************************************************************/
3 /* Chaine de CAO & VLSI Alliance */
5 /* Produit : TRC Version 1.01 */
6 /* Fichier : trc_hier.c */
8 /* (c) copyright 1997-1998 Laboratoire LIP6 equipe ASIM */
9 /* Tous droits reserves */
10 /* Support : e-mail alliance-support@asim.lip6.fr */
12 /* Auteur(s) : Gregoire AVOT */
14 /****************************************************************************/
20 Revision : $Revision: 1.29 $
21 Author : $Author: fabrice $
22 Date : $Date: 2008/03/20 16:23:04 $
26 int RCX_NB_CAPA_L0
= -1 ;
27 int RCX_NB_CAPA_L1
= -1 ;
28 int RCX_NB_CAPA_L2
= -1 ;
29 int RCX_CAPA_NOM_MIN
= -1 ;
30 int RCX_CAPA_NOM_MAX
= -1 ;
31 int RCX_CAPA_UP_NOM_MIN
= -1 ;
32 int RCX_CAPA_UP_NOM_MAX
= -1 ;
33 int RCX_CAPA_DW_NOM_MIN
= -1 ;
34 int RCX_CAPA_DW_NOM_MAX
= -1 ;
35 int RCX_CAPA_UP_MIN
= -1 ;
36 int RCX_CAPA_UP_MAX
= -1 ;
37 int RCX_CAPA_DW_MIN
= -1 ;
38 int RCX_CAPA_DW_MAX
= -1 ;
39 int RCX_CAPA_NOMF_MIN
= -1 ;
40 int RCX_CAPA_NOMF_MAX
= -1 ;
41 int RCX_CAPA_UP_NOMF_MIN
= -1 ;
42 int RCX_CAPA_UP_NOMF_MAX
= -1 ;
43 int RCX_CAPA_DW_NOMF_MIN
= -1 ;
44 int RCX_CAPA_DW_NOMF_MAX
= -1 ;
46 /******************************************************************************\
48 Renvoie la capacité associée à un locon.
50 slope : TRC_SLOPE_UP, TRC_SLOPE_DOWN, TRC_SLOPE_UNK.
51 type : TRC_CAPA_MIN, TRC_CAPA_NOM, TRC_CAPA_NOM_MIN,
52 TRC_CAPA_NOM_MAX, TRC_CAPA_MAX.
53 domain : TRC_HALF, TRC_END
55 status (peut être NULL) : indique quelle est la valeur de la capacité.
56 RCX_CAPA_OK : la capacité a été exactement trouvée.
57 RCX_CAPA_EQUIV : la capacité a été déduite.
59 \******************************************************************************/
61 RCXFLOAT
rcx_getloconcapa( locon_list
*locon
,
71 ptspace
= rcx_loconcapa_getspace( locon
) ;
74 *status
= RCX_CAPA_EQUIV
;
77 if( status
) *status
= RCX_CAPA_OK
;
79 switch( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
) {
81 case ELP_CAPA_LEVEL0
:
86 if( domain
== TRC_HALF
)
87 capa
= ( ptspace
[RCX_CAPA_NOM_MIN
] + ptspace
[RCX_CAPA_NOM_MAX
] ) / 2.0 ;
89 capa
= ( ptspace
[RCX_CAPA_NOMF_MIN
] + ptspace
[RCX_CAPA_NOMF_MAX
] ) / 2.0 ;
92 case TRC_CAPA_NOM_MIN
:
93 if( domain
== TRC_HALF
)
94 capa
= ptspace
[RCX_CAPA_NOM_MIN
] ;
96 capa
= ptspace
[RCX_CAPA_NOMF_MIN
] ;
99 case TRC_CAPA_NOM_MAX
:
100 if( domain
== TRC_HALF
)
101 capa
= ptspace
[RCX_CAPA_NOM_MAX
] ;
103 capa
= ptspace
[RCX_CAPA_NOMF_MAX
] ;
107 if( domain
== TRC_HALF
)
108 capa
= ( ptspace
[RCX_CAPA_NOM_MIN
] + ptspace
[RCX_CAPA_NOM_MAX
] ) / 2.0 ;
110 capa
= ( ptspace
[RCX_CAPA_NOMF_MIN
] + ptspace
[RCX_CAPA_NOMF_MAX
] ) / 2.0 ;
111 if( status
) *status
= RCX_CAPA_EQUIV
;
117 case ELP_CAPA_LEVEL1
:
126 if( domain
== TRC_HALF
)
127 capa
= ( ptspace
[RCX_CAPA_UP_NOM_MIN
] + ptspace
[RCX_CAPA_UP_NOM_MAX
] ) / 2.0 ;
129 capa
= ( ptspace
[RCX_CAPA_UP_NOMF_MIN
] + ptspace
[RCX_CAPA_UP_NOMF_MAX
] ) / 2.0 ;
132 case TRC_SLOPE_DOWN
:
133 if( domain
== TRC_HALF
)
134 capa
= ( ptspace
[RCX_CAPA_DW_NOM_MIN
] + ptspace
[RCX_CAPA_DW_NOM_MAX
] ) / 2.0 ;
136 capa
= ( ptspace
[RCX_CAPA_DW_NOMF_MIN
] + ptspace
[RCX_CAPA_DW_NOMF_MAX
] ) / 2.0 ;
140 if( domain
== TRC_HALF
)
141 capa
= ( ptspace
[RCX_CAPA_UP_NOM_MIN
] + ptspace
[RCX_CAPA_UP_NOM_MAX
] +
142 ptspace
[RCX_CAPA_DW_NOM_MIN
] + ptspace
[RCX_CAPA_DW_NOM_MAX
] ) / 4.0 ;
144 capa
= ( ptspace
[RCX_CAPA_UP_NOMF_MIN
] + ptspace
[RCX_CAPA_UP_NOMF_MAX
] +
145 ptspace
[RCX_CAPA_DW_NOMF_MIN
] + ptspace
[RCX_CAPA_DW_NOMF_MAX
] ) / 4.0 ;
146 if( status
) *status
= RCX_CAPA_EQUIV
;
151 case TRC_CAPA_NOM_MIN
:
156 if( domain
== TRC_HALF
)
157 capa
= ptspace
[RCX_CAPA_UP_NOM_MIN
] ;
159 capa
= ptspace
[RCX_CAPA_UP_NOMF_MIN
] ;
162 case TRC_SLOPE_DOWN
:
163 if( domain
== TRC_HALF
)
164 capa
= ptspace
[RCX_CAPA_DW_NOM_MIN
] ;
166 capa
= ptspace
[RCX_CAPA_DW_NOMF_MIN
] ;
170 if( domain
== TRC_HALF
)
171 capa
= ( ptspace
[RCX_CAPA_UP_NOM_MIN
] + ptspace
[RCX_CAPA_DW_NOM_MIN
] ) / 2.0 ;
173 capa
= ( ptspace
[RCX_CAPA_UP_NOMF_MIN
] + ptspace
[RCX_CAPA_DW_NOMF_MIN
] ) / 2.0 ;
174 if( status
) *status
= RCX_CAPA_EQUIV
;
179 case TRC_CAPA_NOM_MAX
:
184 if( domain
== TRC_HALF
)
185 capa
= ptspace
[RCX_CAPA_UP_NOM_MAX
] ;
187 capa
= ptspace
[RCX_CAPA_UP_NOMF_MAX
] ;
190 case TRC_SLOPE_DOWN
:
191 if( domain
== TRC_HALF
)
192 capa
= ptspace
[RCX_CAPA_DW_NOM_MAX
] ;
194 capa
= ptspace
[RCX_CAPA_DW_NOMF_MAX
] ;
198 if( domain
== TRC_HALF
)
199 capa
= ( ptspace
[RCX_CAPA_UP_NOM_MAX
] + ptspace
[RCX_CAPA_DW_NOM_MAX
] ) / 2.0 ;
201 capa
= ( ptspace
[RCX_CAPA_UP_NOMF_MAX
] + ptspace
[RCX_CAPA_DW_NOMF_MAX
] ) / 2.0 ;
202 if( status
) *status
= RCX_CAPA_EQUIV
;
212 if( domain
== TRC_HALF
)
213 capa
= ( ptspace
[RCX_CAPA_UP_NOM_MIN
] + ptspace
[RCX_CAPA_UP_NOM_MAX
] ) / 2.0 ;
215 capa
= ( ptspace
[RCX_CAPA_UP_NOMF_MIN
] + ptspace
[RCX_CAPA_UP_NOMF_MAX
] ) / 2.0 ;
218 case TRC_SLOPE_DOWN
:
219 if( domain
== TRC_HALF
)
220 capa
= ( ptspace
[RCX_CAPA_DW_NOM_MIN
] + ptspace
[RCX_CAPA_DW_NOM_MAX
] ) / 2.0 ;
222 capa
= ( ptspace
[RCX_CAPA_DW_NOMF_MIN
] + ptspace
[RCX_CAPA_DW_NOMF_MAX
] ) / 2.0 ;
226 if( domain
== TRC_HALF
)
227 capa
= ( ptspace
[RCX_CAPA_UP_NOM_MIN
] + ptspace
[RCX_CAPA_UP_NOM_MAX
] +
228 ptspace
[RCX_CAPA_DW_NOM_MIN
] + ptspace
[RCX_CAPA_DW_NOM_MAX
] ) / 4.0 ;
230 capa
= ( ptspace
[RCX_CAPA_UP_NOMF_MIN
] + ptspace
[RCX_CAPA_UP_NOMF_MAX
] +
231 ptspace
[RCX_CAPA_DW_NOMF_MIN
] + ptspace
[RCX_CAPA_DW_NOMF_MAX
] ) / 4.0 ;
234 if( status
) *status
= RCX_CAPA_EQUIV
;
238 case ELP_CAPA_LEVEL2
:
247 capa
= ptspace
[RCX_CAPA_UP_MIN
];
250 case TRC_SLOPE_DOWN
:
251 capa
= ptspace
[RCX_CAPA_DW_MIN
];
255 capa
= ( ptspace
[RCX_CAPA_UP_MIN
] + ptspace
[RCX_CAPA_DW_MIN
] ) / 2.0 ;
256 if( status
) *status
= RCX_CAPA_EQUIV
;
267 if( domain
== TRC_HALF
)
268 capa
= ( ptspace
[RCX_CAPA_UP_NOM_MIN
] + ptspace
[RCX_CAPA_UP_NOM_MAX
] ) / 2.0 ;
270 capa
= ( ptspace
[RCX_CAPA_UP_NOMF_MIN
] + ptspace
[RCX_CAPA_UP_NOMF_MAX
] ) / 2.0 ;
273 case TRC_SLOPE_DOWN
:
274 if( domain
== TRC_HALF
)
275 capa
= ( ptspace
[RCX_CAPA_DW_NOM_MIN
] + ptspace
[RCX_CAPA_DW_NOM_MAX
] ) / 2.0 ;
277 capa
= ( ptspace
[RCX_CAPA_DW_NOMF_MIN
] + ptspace
[RCX_CAPA_DW_NOMF_MAX
] ) / 2.0 ;
281 if( domain
== TRC_HALF
)
282 capa
= ( ptspace
[RCX_CAPA_UP_NOM_MIN
] + ptspace
[RCX_CAPA_UP_NOM_MAX
] +
283 ptspace
[RCX_CAPA_DW_NOM_MIN
] + ptspace
[RCX_CAPA_DW_NOM_MAX
] ) / 4.0 ;
285 capa
= ( ptspace
[RCX_CAPA_UP_NOMF_MIN
] + ptspace
[RCX_CAPA_UP_NOMF_MAX
] +
286 ptspace
[RCX_CAPA_DW_NOMF_MIN
] + ptspace
[RCX_CAPA_DW_NOMF_MAX
] ) / 4.0 ;
287 if( status
) *status
= RCX_CAPA_EQUIV
;
293 case TRC_CAPA_NOM_MIN
:
298 if( domain
== TRC_HALF
)
299 capa
= ptspace
[RCX_CAPA_UP_NOM_MIN
] ;
301 capa
= ptspace
[RCX_CAPA_UP_NOMF_MIN
] ;
304 case TRC_SLOPE_DOWN
:
305 if( domain
== TRC_HALF
)
306 capa
= ptspace
[RCX_CAPA_DW_NOM_MIN
] ;
308 capa
= ptspace
[RCX_CAPA_DW_NOMF_MIN
] ;
312 if( domain
== TRC_HALF
)
313 capa
= ( ptspace
[RCX_CAPA_UP_NOM_MIN
] + ptspace
[RCX_CAPA_DW_NOM_MIN
] ) / 2.0 ;
315 capa
= ( ptspace
[RCX_CAPA_UP_NOMF_MIN
] + ptspace
[RCX_CAPA_DW_NOMF_MIN
] ) / 2.0 ;
316 if( status
) *status
= RCX_CAPA_EQUIV
;
322 case TRC_CAPA_NOM_MAX
:
327 if( domain
== TRC_HALF
)
328 capa
= ptspace
[RCX_CAPA_UP_NOM_MAX
] ;
330 capa
= ptspace
[RCX_CAPA_UP_NOMF_MAX
] ;
333 case TRC_SLOPE_DOWN
:
334 if( domain
== TRC_HALF
)
335 capa
= ptspace
[RCX_CAPA_DW_NOM_MAX
] ;
337 capa
= ptspace
[RCX_CAPA_DW_NOMF_MAX
] ;
341 if( domain
== TRC_HALF
)
342 capa
= ( ptspace
[RCX_CAPA_UP_NOM_MAX
] + ptspace
[RCX_CAPA_DW_NOM_MAX
] ) / 2.0 ;
344 capa
= ( ptspace
[RCX_CAPA_UP_NOMF_MAX
] + ptspace
[RCX_CAPA_DW_NOMF_MAX
] ) / 2.0 ;
345 if( status
) *status
= RCX_CAPA_EQUIV
;
356 capa
= ptspace
[RCX_CAPA_UP_MAX
] ;
359 case TRC_SLOPE_DOWN
:
360 capa
= ptspace
[RCX_CAPA_DW_MAX
] ;
364 capa
= ( ptspace
[RCX_CAPA_UP_MAX
] + ptspace
[RCX_CAPA_DW_MAX
] ) / 2.0 ;
365 if( status
) *status
= RCX_CAPA_EQUIV
;
377 float rcx_get_all_locon_capa( losig_list
*losig
, char slope
, char type
, char domain
)
384 ptl
= getptype( losig
->USER
, LOFIGCHAIN
);
386 for( scancon
= (chain_list
*)ptl
->DATA
;
388 scancon
= scancon
->NEXT
) {
389 locon
= (locon_list
*)scancon
->DATA
;
390 if( !rcx_isvalidlocon( locon
) )
392 sumcapa
= sumcapa
+ rcx_getloconcapa( locon
, slope
, type
, domain
, NULL
) ;
398 /******************************************************************************\
400 Initialise la capacité sur un locon.
401 Seul l'un des deux arguments lofig ou loins doit être positionné. Il s'agit de
402 l'endroit où est stocké le tableau des capacités allouées par tat.
404 \******************************************************************************/
406 void rcx_setloconcapa_l0( lofig_list
*lofig
,
416 if( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
!= ELP_CAPA_LEVEL0
) {
417 avt_errmsg( TRC_ERRMSG
, "004", AVT_FATAL
, 1 );
420 ptspace
= rcx_loconcapa_getspace( locon
);
422 ptspace
= rcx_loconcapa_addspace( lofig
, loins
, locon
);
426 ptspace
[RCX_CAPA_NOM_MIN
] = capamin
;
427 ptspace
[RCX_CAPA_NOM_MAX
] = capamax
;
430 ptspace
[RCX_CAPA_NOMF_MIN
] = capamin
;
431 ptspace
[RCX_CAPA_NOMF_MAX
] = capamax
;
434 ptspace
[RCX_CAPA_NOM_MIN
] = capamin
;
435 ptspace
[RCX_CAPA_NOM_MAX
] = capamax
;
436 ptspace
[RCX_CAPA_NOMF_MIN
] = capamin
;
437 ptspace
[RCX_CAPA_NOMF_MAX
] = capamax
;
441 void rcx_setloconcapa_l1( lofig_list
*lofig
,
445 RCXFLOAT capa_up_min
,
446 RCXFLOAT capa_up_max
,
447 RCXFLOAT capa_dw_min
,
453 if( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
!= ELP_CAPA_LEVEL1
) {
454 avt_errmsg( TRC_ERRMSG
, "004", AVT_FATAL
, 2 );
457 ptspace
= rcx_loconcapa_getspace( locon
);
459 ptspace
= rcx_loconcapa_addspace( lofig
, loins
, locon
);
463 ptspace
[RCX_CAPA_UP_NOM_MIN
] = capa_up_min
;
464 ptspace
[RCX_CAPA_UP_NOM_MAX
] = capa_up_max
;
465 ptspace
[RCX_CAPA_DW_NOM_MIN
] = capa_dw_min
;
466 ptspace
[RCX_CAPA_DW_NOM_MAX
] = capa_dw_max
;
469 ptspace
[RCX_CAPA_UP_NOMF_MIN
] = capa_up_min
;
470 ptspace
[RCX_CAPA_UP_NOMF_MAX
] = capa_up_max
;
471 ptspace
[RCX_CAPA_DW_NOMF_MIN
] = capa_dw_min
;
472 ptspace
[RCX_CAPA_DW_NOMF_MAX
] = capa_dw_max
;
475 ptspace
[RCX_CAPA_UP_NOM_MIN
] = capa_up_min
;
476 ptspace
[RCX_CAPA_UP_NOM_MAX
] = capa_up_max
;
477 ptspace
[RCX_CAPA_DW_NOM_MIN
] = capa_dw_min
;
478 ptspace
[RCX_CAPA_DW_NOM_MAX
] = capa_dw_max
;
479 ptspace
[RCX_CAPA_UP_NOMF_MIN
] = capa_up_min
;
480 ptspace
[RCX_CAPA_UP_NOMF_MAX
] = capa_up_max
;
481 ptspace
[RCX_CAPA_DW_NOMF_MIN
] = capa_dw_min
;
482 ptspace
[RCX_CAPA_DW_NOMF_MAX
] = capa_dw_max
;
487 /* les capacités capa_up_min, capa_up_max, capa_dw_min, capa_dw_max sont prise en
488 compte uniquement si domain=TRC_HALF */
489 void rcx_setloconcapa_l2( lofig_list
*lofig
,
493 RCXFLOAT capa_up_min
,
494 RCXFLOAT capa_up_nom_min
,
495 RCXFLOAT capa_up_nom_max
,
496 RCXFLOAT capa_up_max
,
497 RCXFLOAT capa_dw_min
,
498 RCXFLOAT capa_dw_nom_min
,
499 RCXFLOAT capa_dw_nom_max
,
505 if( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
!= ELP_CAPA_LEVEL2
) {
506 avt_errmsg( TRC_ERRMSG
, "004", AVT_FATAL
, 3 );
509 ptspace
= rcx_loconcapa_getspace( locon
);
511 ptspace
= rcx_loconcapa_addspace( lofig
, loins
, locon
);
515 ptspace
[RCX_CAPA_UP_MIN
] = capa_up_min
;
516 ptspace
[RCX_CAPA_UP_MAX
] = capa_up_max
;
517 ptspace
[RCX_CAPA_DW_MIN
] = capa_dw_min
;
518 ptspace
[RCX_CAPA_DW_MAX
] = capa_dw_max
;
519 ptspace
[RCX_CAPA_UP_NOM_MIN
] = capa_up_nom_min
;
520 ptspace
[RCX_CAPA_UP_NOM_MAX
] = capa_up_nom_max
;
521 ptspace
[RCX_CAPA_DW_NOM_MIN
] = capa_dw_nom_min
;
522 ptspace
[RCX_CAPA_DW_NOM_MAX
] = capa_dw_nom_max
;
525 ptspace
[RCX_CAPA_UP_NOMF_MIN
] = capa_up_nom_min
;
526 ptspace
[RCX_CAPA_UP_NOMF_MAX
] = capa_up_nom_max
;
527 ptspace
[RCX_CAPA_DW_NOMF_MIN
] = capa_dw_nom_min
;
528 ptspace
[RCX_CAPA_DW_NOMF_MAX
] = capa_dw_nom_max
;
531 ptspace
[RCX_CAPA_UP_MIN
] = capa_up_min
;
532 ptspace
[RCX_CAPA_UP_MAX
] = capa_up_max
;
533 ptspace
[RCX_CAPA_DW_MIN
] = capa_dw_min
;
534 ptspace
[RCX_CAPA_DW_MAX
] = capa_dw_max
;
535 ptspace
[RCX_CAPA_UP_NOM_MIN
] = capa_up_nom_min
;
536 ptspace
[RCX_CAPA_UP_NOM_MAX
] = capa_up_nom_max
;
537 ptspace
[RCX_CAPA_DW_NOM_MIN
] = capa_dw_nom_min
;
538 ptspace
[RCX_CAPA_DW_NOM_MAX
] = capa_dw_nom_max
;
539 ptspace
[RCX_CAPA_UP_NOMF_MIN
] = capa_up_nom_min
;
540 ptspace
[RCX_CAPA_UP_NOMF_MAX
] = capa_up_nom_max
;
541 ptspace
[RCX_CAPA_DW_NOMF_MIN
] = capa_dw_nom_min
;
542 ptspace
[RCX_CAPA_DW_NOMF_MAX
] = capa_dw_nom_max
;
548 /******************************************************************************\
550 Ajoute la capacité sur un locon.
551 Seul l'un des deux arguments lofig ou loins doit être positionné. Il s'agit de
552 l'endroit où est stocké le tableau des capacités allouées par tat.
554 \******************************************************************************/
556 void rcx_addloconcapa_l0( lofig_list
*lofig
,
566 if( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
!= ELP_CAPA_LEVEL0
) {
567 avt_errmsg( TRC_ERRMSG
, "004", AVT_FATAL
, 4 );
570 ptspace
= rcx_loconcapa_getspace( locon
);
572 ptspace
= rcx_loconcapa_addspace( lofig
, loins
, locon
);
574 if( domain
== TRC_HALF
) {
575 if( RCX_CAPA_NOM_MIN
!= RCX_CAPA_NOM_MIN
) {
576 ptspace
[RCX_CAPA_NOM_MIN
] = ptspace
[RCX_CAPA_NOM_MIN
] + capamin
;
577 ptspace
[RCX_CAPA_NOM_MAX
] = ptspace
[RCX_CAPA_NOM_MAX
] + capamax
;
580 ptspace
[RCX_CAPA_NOM_MIN
] = ptspace
[RCX_CAPA_NOM_MIN
] + (capamax
+capamin
)/2.0 ;
583 if( RCX_CAPA_NOMF_MIN
!= RCX_CAPA_NOMF_MIN
) {
584 ptspace
[RCX_CAPA_NOMF_MIN
] = ptspace
[RCX_CAPA_NOMF_MIN
] + capamin
;
585 ptspace
[RCX_CAPA_NOMF_MAX
] = ptspace
[RCX_CAPA_NOMF_MAX
] + capamax
;
588 ptspace
[RCX_CAPA_NOMF_MIN
] = ptspace
[RCX_CAPA_NOMF_MIN
] + (capamax
+capamin
)/2.0 ;
592 void rcx_addloconcapa_l1( lofig_list
*lofig
,
596 RCXFLOAT capa_up_min
,
597 RCXFLOAT capa_up_max
,
598 RCXFLOAT capa_dw_min
,
604 if( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
!= ELP_CAPA_LEVEL1
) {
605 avt_errmsg( TRC_ERRMSG
, "004", AVT_FATAL
, 5 );
608 ptspace
= rcx_loconcapa_getspace( locon
);
610 ptspace
= rcx_loconcapa_addspace( lofig
, loins
, locon
);
612 if( domain
== TRC_HALF
) {
613 if( RCX_CAPA_UP_NOM_MIN
!= RCX_CAPA_UP_NOM_MAX
) {
614 ptspace
[RCX_CAPA_UP_NOM_MIN
] = ptspace
[RCX_CAPA_UP_NOM_MIN
] + capa_up_min
;
615 ptspace
[RCX_CAPA_UP_NOM_MAX
] = ptspace
[RCX_CAPA_UP_NOM_MAX
] + capa_up_max
;
616 ptspace
[RCX_CAPA_DW_NOM_MIN
] = ptspace
[RCX_CAPA_DW_NOM_MIN
] + capa_dw_min
;
617 ptspace
[RCX_CAPA_DW_NOM_MAX
] = ptspace
[RCX_CAPA_DW_NOM_MAX
] + capa_dw_max
;
620 ptspace
[RCX_CAPA_UP_NOM_MIN
] = ptspace
[RCX_CAPA_UP_NOM_MIN
] + (capa_up_max
+capa_up_min
)/2.0;
621 ptspace
[RCX_CAPA_DW_NOM_MIN
] = ptspace
[RCX_CAPA_DW_NOM_MIN
] + (capa_dw_max
+capa_dw_min
)/2.0;
625 if( RCX_CAPA_UP_NOMF_MIN
!= RCX_CAPA_UP_NOMF_MAX
) {
626 ptspace
[RCX_CAPA_UP_NOMF_MIN
] = ptspace
[RCX_CAPA_UP_NOMF_MIN
] + capa_up_min
;
627 ptspace
[RCX_CAPA_UP_NOMF_MAX
] = ptspace
[RCX_CAPA_UP_NOMF_MAX
] + capa_up_max
;
628 ptspace
[RCX_CAPA_DW_NOMF_MIN
] = ptspace
[RCX_CAPA_DW_NOMF_MIN
] + capa_dw_min
;
629 ptspace
[RCX_CAPA_DW_NOMF_MAX
] = ptspace
[RCX_CAPA_DW_NOMF_MAX
] + capa_dw_max
;
632 ptspace
[RCX_CAPA_UP_NOMF_MIN
] = ptspace
[RCX_CAPA_UP_NOMF_MIN
] + (capa_up_max
+capa_up_min
)/2.0;
633 ptspace
[RCX_CAPA_DW_NOMF_MIN
] = ptspace
[RCX_CAPA_DW_NOMF_MIN
] + (capa_dw_max
+capa_dw_min
)/2.0;
638 /* les capacités capa_up_min, capa_up_max, capa_dw_min, capa_dw_max sont prise en
639 compte uniquement si domain=TRC_HALF */
640 void rcx_addloconcapa_l2( lofig_list
*lofig
,
644 RCXFLOAT capa_up_min
,
645 RCXFLOAT capa_up_nom_min
,
646 RCXFLOAT capa_up_nom_max
,
647 RCXFLOAT capa_up_max
,
648 RCXFLOAT capa_dw_min
,
649 RCXFLOAT capa_dw_nom_min
,
650 RCXFLOAT capa_dw_nom_max
,
656 if( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
!= ELP_CAPA_LEVEL2
) {
657 avt_errmsg( TRC_ERRMSG
, "004", AVT_FATAL
, 6 );
660 ptspace
= rcx_loconcapa_getspace( locon
);
662 ptspace
= rcx_loconcapa_addspace( lofig
, loins
, locon
);
665 if( domain
== TRC_HALF
) {
667 ptspace
[RCX_CAPA_UP_MIN
] = ptspace
[RCX_CAPA_UP_MIN
] + capa_up_min
;
668 ptspace
[RCX_CAPA_UP_MAX
] = ptspace
[RCX_CAPA_UP_MAX
] + capa_up_max
;
669 ptspace
[RCX_CAPA_DW_MIN
] = ptspace
[RCX_CAPA_DW_MIN
] + capa_dw_min
;
670 ptspace
[RCX_CAPA_DW_MAX
] = ptspace
[RCX_CAPA_DW_MAX
] + capa_dw_max
;
672 if( RCX_CAPA_UP_NOM_MIN
!= RCX_CAPA_UP_NOM_MAX
) {
673 ptspace
[RCX_CAPA_UP_NOM_MIN
] = ptspace
[RCX_CAPA_UP_NOM_MIN
] + capa_up_nom_min
;
674 ptspace
[RCX_CAPA_UP_NOM_MAX
] = ptspace
[RCX_CAPA_UP_NOM_MAX
] + capa_up_nom_max
;
675 ptspace
[RCX_CAPA_DW_NOM_MIN
] = ptspace
[RCX_CAPA_DW_NOM_MIN
] + capa_dw_nom_min
;
676 ptspace
[RCX_CAPA_DW_NOM_MAX
] = ptspace
[RCX_CAPA_DW_NOM_MAX
] + capa_dw_nom_max
;
679 ptspace
[RCX_CAPA_UP_NOM_MIN
] = ptspace
[RCX_CAPA_UP_NOM_MIN
] + (capa_up_nom_min
+capa_up_nom_max
)/2.0;
680 ptspace
[RCX_CAPA_DW_NOM_MIN
] = ptspace
[RCX_CAPA_DW_NOM_MIN
] + (capa_dw_nom_min
+capa_dw_nom_max
)/2.0;
684 if( RCX_CAPA_UP_NOMF_MIN
!= RCX_CAPA_UP_NOMF_MAX
) {
685 ptspace
[RCX_CAPA_UP_NOMF_MIN
] = ptspace
[RCX_CAPA_UP_NOMF_MIN
] + capa_up_nom_min
;
686 ptspace
[RCX_CAPA_UP_NOMF_MAX
] = ptspace
[RCX_CAPA_UP_NOMF_MAX
] + capa_up_nom_max
;
687 ptspace
[RCX_CAPA_DW_NOMF_MIN
] = ptspace
[RCX_CAPA_DW_NOMF_MIN
] + capa_dw_nom_min
;
688 ptspace
[RCX_CAPA_DW_NOMF_MAX
] = ptspace
[RCX_CAPA_DW_NOMF_MAX
] + capa_dw_nom_max
;
691 ptspace
[RCX_CAPA_UP_NOMF_MIN
] = ptspace
[RCX_CAPA_UP_NOMF_MIN
] + (capa_up_nom_min
+capa_up_nom_max
)/2.0;
692 ptspace
[RCX_CAPA_DW_NOMF_MIN
] = ptspace
[RCX_CAPA_DW_NOMF_MIN
] + (capa_dw_nom_min
+capa_dw_nom_max
)/2.0;
697 /******************************************************************************\
699 Ajoute les capacités de loconb dans celles de locona.
701 \******************************************************************************/
703 void rcx_add_capa_locon( lofig_list
*lofig
,
708 char domain
[] = { TRC_HALF
, TRC_END
} ;
711 for( i
=0 ; i
<sizeof(domain
)/sizeof(domain
[0]) ; i
++ ) {
712 switch( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
) {
713 case ELP_CAPA_LEVEL0
:
714 rcx_addloconcapa_l0( lofig
,
718 rcx_getloconcapa( loconb
,
724 rcx_getloconcapa( loconb
,
732 case ELP_CAPA_LEVEL1
:
733 rcx_addloconcapa_l1( lofig
,
737 rcx_getloconcapa( loconb
,
743 rcx_getloconcapa( loconb
,
749 rcx_getloconcapa( loconb
,
755 rcx_getloconcapa( loconb
,
763 case ELP_CAPA_LEVEL2
:
764 rcx_addloconcapa_l2( lofig
,
768 rcx_getloconcapa( loconb
,
774 rcx_getloconcapa( loconb
,
780 rcx_getloconcapa( loconb
,
786 rcx_getloconcapa( loconb
,
792 rcx_getloconcapa( loconb
,
798 rcx_getloconcapa( loconb
,
804 rcx_getloconcapa( loconb
,
810 rcx_getloconcapa( loconb
,
822 /******************************************************************************\
824 Efface une capacité associée à un locon.
826 \******************************************************************************/
828 void rcx_freeloconcapa( lofig_list
*lofig
,
833 if( rcx_loconcapa_freespace( lofig
, loins
, locon
) )
834 locon
->USER
= delptype( locon
->USER
, RCX_LOCONCAPA_SPACE
);
837 /******************************************************************************\
839 Ajoute un emplacement pour stocker une capacité sur un locon.
840 Seul l'un des deux arguments lofig ou loins doit être positionné. Il s'agit de
841 l'endroit où est stocké le tableau des capacités allouées par tat.
843 \******************************************************************************/
845 float* rcx_loconcapa_addspace( lofig_list
*lofig
,
854 heap
= rcx_loconcapa_giveheap( lofig
, loins
);
855 space
= AddHeapItem( heap
);
857 locon
->USER
= addptype( locon
->USER
, RCX_LOCONCAPA_SPACE
, space
);
858 switch( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
) {
859 case ELP_CAPA_LEVEL0
: n
= RCX_NB_CAPA_L0
; break ;
860 case ELP_CAPA_LEVEL1
: n
= RCX_NB_CAPA_L1
; break ;
861 case ELP_CAPA_LEVEL2
: n
= RCX_NB_CAPA_L2
; break ;
864 for( i
=0 ; i
< n
; i
++ )
870 /******************************************************************************\
872 Renvoie l'emplacement pour stocker une capacité sur un locon, ou NULL si cet
873 emplacement n'a jamais été créé par rcx_loconcapa_addspace().
875 \******************************************************************************/
877 float* rcx_loconcapa_getspace( locon_list
*locon
)
881 ptl
= getptype( locon
->USER
, RCX_LOCONCAPA_SPACE
);
882 if( !ptl
) return NULL
;
883 return (float*)ptl
->DATA
;
886 /******************************************************************************\
888 Libère l'emplacement pour stocker une capacité.
890 \******************************************************************************/
892 char rcx_loconcapa_freespace( lofig_list
*lofig
,
900 ptl
= getptype( locon
->USER
, RCX_LOCONCAPA_SPACE
);
902 space
= (float*)ptl
->DATA
;
904 heap
= rcx_loconcapa_giveheap( lofig
, loins
);
905 DelHeapItem( heap
, space
);
910 /******************************************************************************\
912 Renvoie un HeapAlloc associé soit à une lofig, soit à une loins.
914 \******************************************************************************/
916 HeapAlloc
* rcx_loconcapa_giveheap( lofig_list
*lofig
, loins_list
*loins
)
922 switch( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
) {
923 case ELP_CAPA_LEVEL0
: n
= RCX_NB_CAPA_L0
* sizeof( float ) ; break ;
924 case ELP_CAPA_LEVEL1
: n
= RCX_NB_CAPA_L1
* sizeof( float ) ; break ;
925 case ELP_CAPA_LEVEL2
: n
= RCX_NB_CAPA_L2
* sizeof( float ) ; break ;
927 rcx_error(44,NULL
,AVT_FATAL
);
931 ptl
= getptype( lofig
->USER
, RCX_LOCONCAPA_HEAP
);
933 heap
= mbkalloc( sizeof( HeapAlloc
) );
934 CreateHeap( n
, 4096, heap
);
935 lofig
->USER
= addptype( lofig
->USER
, RCX_LOCONCAPA_HEAP
, heap
);
938 heap
= (HeapAlloc
*)ptl
->DATA
;
942 ptl
= getptype( loins
->USER
, RCX_LOCONCAPA_HEAP
);
944 heap
= mbkalloc( sizeof( HeapAlloc
) );
945 CreateHeap( n
, 32, heap
);
946 loins
->USER
= addptype( loins
->USER
, RCX_LOCONCAPA_HEAP
, heap
);
949 heap
= (HeapAlloc
*)ptl
->DATA
;
956 /******************************************************************************\
960 \******************************************************************************/
962 void rcx_loconcapa_freeheap( lofig_list
*lofig
, loins_list
*loins
)
968 ptl
= getptype( lofig
->USER
, RCX_LOCONCAPA_HEAP
);
970 ptl
= getptype( loins
->USER
, RCX_LOCONCAPA_HEAP
);
973 heap
= (HeapAlloc
*)ptl
->DATA
;
976 lofig
->USER
= delptype( lofig
->USER
, RCX_LOCONCAPA_HEAP
);
978 loins
->USER
= delptype( loins
->USER
, RCX_LOCONCAPA_HEAP
);
983 /******************************************************************************\
987 \******************************************************************************/
989 RCXFLOAT
rcx_getnodecapa( losig_list
*ptsig
,
998 RCXFLOAT capa
=0.0, c
;
1000 lowire_list
*lowire
;
1004 locon_list
*ptlocon
;
1009 ptrcx
= getrcx( ptsig
);
1011 // Capacité due aux capacités couplées.
1013 for( chain
= node
->CTCLIST
; chain
; chain
= chain
->NEXT
) {
1014 ctc
= (loctc_list
*)chain
->DATA
;
1015 c
= c
+ rcx_capamiller( ptsig
, ctc
, slope
, type
);
1019 // Capacité due aux fils.
1021 for( chain
= node
->WIRELIST
; chain
; chain
= chain
->NEXT
) {
1022 lowire
= (lowire_list
*)(chain
->DATA
);
1023 c
= c
+ lowire
->CAPA
/2.0 ;
1027 // Capacité due aux connecteurs.
1029 for( chain
= getloconnode( node
) ; chain
; chain
= chain
->NEXT
) {
1031 ptlocon
= (locon_list
*)chain
->DATA
;
1032 if( !rcx_isvalidlocon( ptlocon
) )
1037 if( type
== RCX_MIN
)
1038 capatype
= TRC_CAPA_NOM_MIN
;
1040 capatype
= TRC_CAPA_NOM_MAX
;
1041 capalocon
= rcx_getloconcapa( ptlocon
, slope
->SENS
, capatype
, domain
, NULL
);
1043 if( capalocon
> 0.0 ) {
1044 for( sc
= ptlocon
->PNODE
, nb
=0 ; sc
; sc
=sc
->NEXT
, nb
++ );
1045 c
= c
+ capalocon
/ nb
;
1048 if( rcx_isloconexternal( ptlocon
) ) {
1050 for( sc
= ptlocon
->PNODE
, nb
=0 ; sc
; sc
=sc
->NEXT
, nb
++ );
1052 c
= c
+ extcapa
/ nb
;
1057 // Application du correctif pour les capacités de couplage globales.
1059 capa
= capa
* coefctc
;
1061 // Redimensionnement des capacités
1063 capa
= capa
* tlc_getcapafactor();
1068 /******************************************************************************\
1070 Récupère différents type de capacité :
1073 RCX_SIGCAPA_GROUND : Renvoie les capacités à la masse.
1074 RCX_SIGCAPA_CTK : Renvoie les capacités de couplage.
1076 RCX_SIGCAPA_LOCAL : Prend en compte les capacités localisées.
1077 RCX_SIGCAPA_GLOBAL : Prend en compte les capacités globales.
1079 RCX_SIGCAPA_NORM : CTC à leurs valeurs nominales.
1080 RCX_SIGCAPA_MILLER : Modifie la valeurs des CTC avec l'effet Miller.
1081 RCX_SIGCAPA_DELTA : Calcule la VARIATION de capacité due à l'effet Miller.
1083 slope : utilisé seulement si capadyna différent de RCX_SIGCAPA_NORM.
1084 type : RCX_MIN | RCX_MAX. utilisé seulement si capadyna différent de
1087 \******************************************************************************/
1089 RCXFLOAT
rcx_getsigcapa( lofig_list
*lofig
,
1099 RCXFLOAT sumcapa
= 0.0 ;
1104 chain_list
*scanctc
;
1106 lowire_list
*scanwire
;
1107 char hasglobal
= 'N';
1108 rcx_list
*ptrcx
=NULL
;
1111 chain_list
*scancon
;
1115 ptrcx
= getrcx( ptsig
);
1117 if( capapos
== RCX_SIGCAPA_GLOBAL
) {
1118 if( GETFLAG( ptrcx
->FLAG
, RCXHASNOGCTC
) )
1123 rcn_lock_signal( lofig
, ptsig
);
1125 if( ( capatype
& RCX_SIGCAPA_GROUND
) == RCX_SIGCAPA_GROUND
&&
1126 ( capapos
& RCX_SIGCAPA_LOCAL
) == RCX_SIGCAPA_LOCAL
&&
1127 ( capadyna
== RCX_SIGCAPA_NORM
|| capadyna
== RCX_SIGCAPA_MILLER
)
1129 ptl
= getptype( ptsig
->USER
, LOFIGCHAIN
);
1131 for( scancon
= (chain_list
*)ptl
->DATA
;
1133 scancon
= scancon
->NEXT
) {
1134 locon
= (locon_list
*)scancon
->DATA
;
1135 if( !rcx_isvalidlocon( locon
) )
1138 slopetype
= TRC_SLOPE_UNK
;
1140 slopetype
= slope
->SENS
;
1141 if( type
== RCX_MIN
)
1142 ctype
= TRC_CAPA_NOM_MIN
;
1144 ctype
= TRC_CAPA_NOM_MAX
;
1145 capa
= rcx_getloconcapa( locon
, slopetype
, ctype
, domain
, NULL
);
1146 sumcapa
= sumcapa
+ capa
;
1151 for( scanctc
= ptsig
->PRCN
->PCTC
; scanctc
;scanctc
= scanctc
->NEXT
) {
1153 ctc
= (loctc_list
*)scanctc
->DATA
;
1155 node
= rcn_ctcnode( ctc
, ptsig
);
1160 if( rcx_iscrosstalkcapa( ctc
, ptsig
) )
1161 thiscapatype
= thiscapatype
| RCX_SIGCAPA_CTK
;
1163 thiscapatype
= thiscapatype
| RCX_SIGCAPA_GROUND
;
1166 thiscapapos
= thiscapapos
| RCX_SIGCAPA_LOCAL
;
1168 thiscapapos
= thiscapapos
| RCX_SIGCAPA_GLOBAL
;
1172 if( ( thiscapatype
& capatype
) && ( thiscapapos
& capapos
) ) {
1176 switch( capadyna
) {
1177 case RCX_SIGCAPA_NORM
:
1180 case RCX_SIGCAPA_MILLER
:
1181 capa
= rcx_capamiller( ptsig
, ctc
, slope
, type
);
1183 case RCX_SIGCAPA_DELTA
:
1184 capa
= rcx_capamiller( ptsig
, ctc
, slope
, type
)
1189 sumcapa
= sumcapa
+ capa
;
1193 if( ( capatype
& RCX_SIGCAPA_GROUND
) == RCX_SIGCAPA_GROUND
&&
1194 ( capapos
& RCX_SIGCAPA_LOCAL
) == RCX_SIGCAPA_LOCAL
&&
1195 ( capadyna
== RCX_SIGCAPA_NORM
|| capadyna
== RCX_SIGCAPA_MILLER
)
1198 for( scanwire
= ptsig
->PRCN
->PWIRE
; scanwire
; scanwire
= scanwire
->NEXT
)
1199 sumcapa
= sumcapa
+ scanwire
->CAPA
;
1202 if( hasglobal
=='N' && ptrcx
)
1203 SETFLAG( ptrcx
->FLAG
, RCXHASNOGCTC
);
1206 rcn_unlock_signal( lofig
, ptsig
);
1211 /******************************************************************************\
1212 Renvoie la capacité vue par un net RCX
1213 \******************************************************************************/
1214 float rcx_getcapa( lofig_list
*lofig
, losig_list
*losig
)
1219 capa
= rcx_get_all_locon_capa( losig
, TRC_SLOPE_UNK
, TRC_CAPA_NOM
, TRC_HALF
) ;
1220 sumcapa
= sumcapa
+ capa
;
1221 capa
= rcn_getcapa( lofig
, losig
) ;
1222 sumcapa
= sumcapa
+ capa
;
1227 void rcx_add_capa_from_instance_to_figure( loins_list
*loins
,
1229 locon_list
*loconint
,
1230 locon_list
*loconext
1233 RCXFLOAT cmin
, cmax
;
1234 RCXFLOAT cminf
, cmaxf
;
1235 RCXFLOAT cupmin
, cupmax
;
1236 RCXFLOAT cdwmin
, cdwmax
;
1237 RCXFLOAT cupminf
, cupmaxf
;
1238 RCXFLOAT cdwminf
, cdwmaxf
;
1239 RCXFLOAT cupnommin
, cupnommax
;
1240 RCXFLOAT cdwnommin
, cdwnommax
;
1241 RCXFLOAT cupnomminf
, cupnommaxf
;
1242 RCXFLOAT cdwnomminf
, cdwnommaxf
;
1244 switch( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
) {
1245 case ELP_CAPA_LEVEL0
:
1246 cmin
= rcx_getloconcapa( loconint
, TRC_SLOPE_UNK
, TRC_CAPA_NOM_MIN
, TRC_HALF
, NULL
);
1247 cmax
= rcx_getloconcapa( loconint
, TRC_SLOPE_UNK
, TRC_CAPA_NOM_MAX
, TRC_HALF
, NULL
);
1248 cminf
= rcx_getloconcapa( loconint
, TRC_SLOPE_UNK
, TRC_CAPA_NOM_MIN
, TRC_END
, NULL
);
1249 cmaxf
= rcx_getloconcapa( loconint
, TRC_SLOPE_UNK
, TRC_CAPA_NOM_MAX
, TRC_END
, NULL
);
1250 rcx_freeloconcapa( NULL
, loins
, loconint
);
1251 if( cmin
>0.0 || cmax
>0.0 || cminf
|| cmaxf
) {
1252 rcx_addloconcapa_l0( lofig
, NULL
, loconext
, TRC_HALF
, cmin
, cmax
);
1253 rcx_addloconcapa_l0( lofig
, NULL
, loconext
, TRC_HALF
, cminf
, cmaxf
);
1256 case ELP_CAPA_LEVEL1
:
1257 cupmin
= rcx_getloconcapa( loconint
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MIN
, TRC_HALF
, NULL
);
1258 cupmax
= rcx_getloconcapa( loconint
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MAX
, TRC_HALF
, NULL
);
1259 cdwmin
= rcx_getloconcapa( loconint
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MIN
, TRC_HALF
, NULL
);
1260 cdwmax
= rcx_getloconcapa( loconint
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MAX
, TRC_HALF
, NULL
);
1261 cupminf
= rcx_getloconcapa( loconint
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MIN
, TRC_END
, NULL
);
1262 cupmaxf
= rcx_getloconcapa( loconint
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MAX
, TRC_END
, NULL
);
1263 cdwminf
= rcx_getloconcapa( loconint
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MIN
, TRC_END
, NULL
);
1264 cdwmaxf
= rcx_getloconcapa( loconint
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MAX
, TRC_END
, NULL
);
1265 rcx_freeloconcapa( NULL
, loins
, loconint
);
1266 if( cupmin
>0.0 || cupmax
>0.0 || cdwmin
>0.0 || cdwmax
>0.0 ||
1267 cupminf
>0.0 || cupmaxf
>0.0 || cdwminf
>0.0 || cdwmaxf
>0.0 ) {
1268 rcx_addloconcapa_l1( lofig
, NULL
, loconext
, TRC_HALF
, cupmin
, cupmax
, cdwmin
, cdwmax
);
1269 rcx_addloconcapa_l1( lofig
, NULL
, loconext
, TRC_END
, cupmin
, cupmax
, cdwmin
, cdwmax
);
1272 case ELP_CAPA_LEVEL2
:
1273 cupmin
= rcx_getloconcapa( loconint
, TRC_SLOPE_UP
, TRC_CAPA_MIN
, TRC_HALF
, NULL
);
1274 cupmax
= rcx_getloconcapa( loconint
, TRC_SLOPE_UP
, TRC_CAPA_MAX
, TRC_HALF
, NULL
);
1275 cdwmin
= rcx_getloconcapa( loconint
, TRC_SLOPE_DOWN
, TRC_CAPA_MIN
, TRC_HALF
, NULL
);
1276 cdwmax
= rcx_getloconcapa( loconint
, TRC_SLOPE_DOWN
, TRC_CAPA_MAX
, TRC_HALF
, NULL
);
1277 cupnommin
= rcx_getloconcapa( loconint
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MIN
, TRC_HALF
, NULL
);
1278 cupnommax
= rcx_getloconcapa( loconint
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MAX
, TRC_HALF
, NULL
);
1279 cdwnommin
= rcx_getloconcapa( loconint
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MIN
, TRC_HALF
, NULL
);
1280 cdwnommax
= rcx_getloconcapa( loconint
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MAX
, TRC_HALF
, NULL
);
1281 cupnomminf
= rcx_getloconcapa( loconint
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MIN
, TRC_END
, NULL
);
1282 cupnommaxf
= rcx_getloconcapa( loconint
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MAX
, TRC_END
, NULL
);
1283 cdwnomminf
= rcx_getloconcapa( loconint
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MIN
, TRC_END
, NULL
);
1284 cdwnommaxf
= rcx_getloconcapa( loconint
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MAX
, TRC_END
, NULL
);
1285 rcx_freeloconcapa( NULL
, loins
, loconint
);
1286 if( cupmin
>0.0 || cdwnommin
>0.0 || cdwnommax
>0.0 || cupmax
>0.0 ||
1287 cdwmin
>0.0 || cupnommin
>0.0 || cupnommax
>0.0 || cdwmax
>0.0 ||
1288 cdwminf
>0.0 || cupnomminf
>0.0 || cupnommaxf
>0.0 || cdwmaxf
>0.0 ) {
1289 rcx_addloconcapa_l2( lofig
, NULL
, loconext
, TRC_HALF
,
1290 cupmin
, cupnommin
, cupnommax
, cupmax
,
1291 cdwmin
, cdwnommin
, cdwnommax
, cdwmax
1293 rcx_addloconcapa_l2( lofig
, NULL
, loconext
, TRC_END
,
1294 cupmin
, cupnomminf
, cupnommaxf
, cupmax
,
1295 cdwmin
, cdwnomminf
, cdwnommaxf
, cdwmax
1302 void rcx_transfert_capa_from_instance_to_figure( loins_list
*loins
,
1307 RCXFLOAT cmin
, cmax
;
1308 RCXFLOAT cminf
, cmaxf
;
1309 RCXFLOAT cupmin
, cupmax
;
1310 RCXFLOAT cdwmin
, cdwmax
;
1311 RCXFLOAT cupminf
, cupmaxf
;
1312 RCXFLOAT cdwminf
, cdwmaxf
;
1313 RCXFLOAT cupnommin
, cupnommax
;
1314 RCXFLOAT cdwnommin
, cdwnommax
;
1315 RCXFLOAT cupnomminf
, cupnommaxf
;
1316 RCXFLOAT cdwnomminf
, cdwnommaxf
;
1318 switch( V_INT_TAB
[__ELP_CAPA_LEVEL
].VALUE
) {
1319 case ELP_CAPA_LEVEL0
:
1320 cmin
= rcx_getloconcapa( locon
, TRC_SLOPE_UNK
, TRC_CAPA_NOM_MIN
, TRC_HALF
, NULL
);
1321 cmax
= rcx_getloconcapa( locon
, TRC_SLOPE_UNK
, TRC_CAPA_NOM_MAX
, TRC_HALF
, NULL
);
1322 cminf
= rcx_getloconcapa( locon
, TRC_SLOPE_UNK
, TRC_CAPA_NOM_MIN
, TRC_END
, NULL
);
1323 cmaxf
= rcx_getloconcapa( locon
, TRC_SLOPE_UNK
, TRC_CAPA_NOM_MAX
, TRC_END
, NULL
);
1324 rcx_freeloconcapa( NULL
, loins
, locon
);
1325 if( cmin
>0.0 || cmax
>0.0 || cminf
|| cmaxf
) {
1326 rcx_setloconcapa_l0( lofig
, NULL
, locon
, TRC_HALF
, cmin
, cmax
);
1327 rcx_setloconcapa_l0( lofig
, NULL
, locon
, TRC_HALF
, cminf
, cmaxf
);
1330 case ELP_CAPA_LEVEL1
:
1331 cupmin
= rcx_getloconcapa( locon
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MIN
, TRC_HALF
, NULL
);
1332 cupmax
= rcx_getloconcapa( locon
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MAX
, TRC_HALF
, NULL
);
1333 cdwmin
= rcx_getloconcapa( locon
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MIN
, TRC_HALF
, NULL
);
1334 cdwmax
= rcx_getloconcapa( locon
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MAX
, TRC_HALF
, NULL
);
1335 cupminf
= rcx_getloconcapa( locon
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MIN
, TRC_END
, NULL
);
1336 cupmaxf
= rcx_getloconcapa( locon
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MAX
, TRC_END
, NULL
);
1337 cdwminf
= rcx_getloconcapa( locon
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MIN
, TRC_END
, NULL
);
1338 cdwmaxf
= rcx_getloconcapa( locon
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MAX
, TRC_END
, NULL
);
1339 rcx_freeloconcapa( NULL
, loins
, locon
);
1340 if( cupmin
>0.0 || cupmax
>0.0 || cdwmin
>0.0 || cdwmax
>0.0 ||
1341 cupminf
>0.0 || cupmaxf
>0.0 || cdwminf
>0.0 || cdwmaxf
>0.0 ) {
1342 rcx_setloconcapa_l1( lofig
, NULL
, locon
, TRC_HALF
, cupmin
, cupmax
, cdwmin
, cdwmax
);
1343 rcx_setloconcapa_l1( lofig
, NULL
, locon
, TRC_END
, cupmin
, cupmax
, cdwmin
, cdwmax
);
1346 case ELP_CAPA_LEVEL2
:
1347 cupmin
= rcx_getloconcapa( locon
, TRC_SLOPE_UP
, TRC_CAPA_MIN
, TRC_HALF
, NULL
);
1348 cupmax
= rcx_getloconcapa( locon
, TRC_SLOPE_UP
, TRC_CAPA_MAX
, TRC_HALF
, NULL
);
1349 cdwmin
= rcx_getloconcapa( locon
, TRC_SLOPE_DOWN
, TRC_CAPA_MIN
, TRC_HALF
, NULL
);
1350 cdwmax
= rcx_getloconcapa( locon
, TRC_SLOPE_DOWN
, TRC_CAPA_MAX
, TRC_HALF
, NULL
);
1351 cupnommin
= rcx_getloconcapa( locon
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MIN
, TRC_HALF
, NULL
);
1352 cupnommax
= rcx_getloconcapa( locon
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MAX
, TRC_HALF
, NULL
);
1353 cdwnommin
= rcx_getloconcapa( locon
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MIN
, TRC_HALF
, NULL
);
1354 cdwnommax
= rcx_getloconcapa( locon
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MAX
, TRC_HALF
, NULL
);
1355 cupnomminf
= rcx_getloconcapa( locon
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MIN
, TRC_END
, NULL
);
1356 cupnommaxf
= rcx_getloconcapa( locon
, TRC_SLOPE_UP
, TRC_CAPA_NOM_MAX
, TRC_END
, NULL
);
1357 cdwnomminf
= rcx_getloconcapa( locon
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MIN
, TRC_END
, NULL
);
1358 cdwnommaxf
= rcx_getloconcapa( locon
, TRC_SLOPE_DOWN
, TRC_CAPA_NOM_MAX
, TRC_END
, NULL
);
1359 rcx_freeloconcapa( NULL
, loins
, locon
);
1360 if( cupmin
>0.0 || cdwnommin
>0.0 || cdwnommax
>0.0 || cupmax
>0.0 ||
1361 cdwmin
>0.0 || cupnommin
>0.0 || cupnommax
>0.0 || cdwmax
>0.0 ||
1362 cdwminf
>0.0 || cupnomminf
>0.0 || cupnommaxf
>0.0 || cdwmaxf
>0.0 ) {
1363 rcx_setloconcapa_l2( lofig
, NULL
, locon
, TRC_HALF
,
1364 cupmin
, cupnommin
, cupnommax
, cupmax
,
1365 cdwmin
, cdwnommin
, cdwnommax
, cdwmax
1367 rcx_setloconcapa_l2( lofig
, NULL
, locon
, TRC_END
,
1368 cupmin
, cupnomminf
, cupnommaxf
, cupmax
,
1369 cdwmin
, cdwnomminf
, cdwnommaxf
, cdwmax