%% syntaxe : solid1 solid2 solidfuz -> solid /solidfuz { 5 dict begin /solid2 exch def /solid1 exch def /S1 solid1 solidgetsommets def /S2 solid2 solidgetsommets def /n S1 length 3 idiv def %% les sommets /S S1 S2 append def %% les faces internes et leurs couleurs /FI1 solid1 solidgetinfaces def /FIC1 solid1 solidgetincolors def solid2 solidnombreinfaces 0 eq { /FI2 [] def /FIC2 [] def } { /FI2 solid2 solidgetinfaces {{n add} apply} apply def /FIC2 solid2 solidgetincolors def } ifelse /FI [FI1 aload pop FI2 aload pop] def /FIC [FIC1 aload pop FIC2 aload pop] def %% les faces externes et leurs couleurs /FO1 solid1 solidgetoutfaces def /FOC1 solid1 solidgetoutcolors def /FO2 solid2 solidgetoutfaces {{n add} apply} apply def /FOC2 solid2 solidgetoutcolors def /FO [FO1 aload pop FO2 aload pop] def /FOC [FOC1 aload pop FOC2 aload pop] def /F [FO aload pop FI aload pop] def /FC [FOC aload pop FIC aload pop] def /IO [ 0 FO length 1 sub FI length 0 gt { dup 1 add dup FI length add 1 sub } { -1 -1 } ifelse ] def S F generesolid dup FC solidputfcolors dup IO solidputinouttable end } def %% %% syntaxe : solid1 solid2 solidfuz -> solid %% /solidfuz { %% 5 dict begin %% /solid2 exch def %% /solid1 exch def %% /S1 solid1 solidgetsommets def %% /S2 solid2 solidgetsommets def %% /n S1 length 3 idiv def %% %% %% les sommets %% /S S1 S2 append def %% %% %% les faces %% /F1 solid1 solidgetfaces def %% solid2 solidgetfaces {{n add} apply} apply %% /F2 exch def %% /F F1 F2 append def %% %% %% les fcolors %% /FC1 solid1 solidgetfcolors def %% /n1 F1 length def %% /n'1 FC1 length def %% /FC2 solid2 solidgetfcolors def %% /n'2 FC2 length def %% n'2 0 eq n'1 0 eq and { %% /FC [] def %% } { %% n'1 n1 lt { %% %% toutes les couleurs de solid1 ne sont pas definies %% %% => on complete %% [ %% FC1 aload pop %% n'1 n1 sub {()} repeat %% ] /FC1 exch store %% } if %% /FC2 solid2 solidgetfcolors def %% /FC FC1 FC2 append def %% } ifelse %% %% S F generesolid %% dup FC solidputfcolors %% end %% } def %%