%% 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
%%
|