import three; size(200); currentprojection=perspective(4,5,5); draw(shift(2Z)*surface(O--X--Y--cycle, new pen[] {red+opacity(0.5),green,blue})); draw(shift(2Y+2Z)*surface(O--X--Y--cycle),blue); draw(shift(2Y+Z)*surface(unitsquare3),green); draw(surface(unitcircle3,new pen[] {red,green,blue,black})); draw(surface(shift(Z)*unitsquare3, new pen[] {red,green+opacity(0.5),blue,black}), prc() ? nolight : currentlight); draw(surface(shift(X)*((0,0,0)..controls (1,0,0) and (2,0,0)..(3,0,0).. controls (2.5,sqrt(3)/2,0) and (2,sqrt(3),0).. (1.5,3*sqrt(3)/2,0).. controls (1,sqrt(3),0) and (0.5,sqrt(3)/2,0)..cycle), new triple[] {(1.5,sqrt(3)/2,2)},new pen[] {red,green,blue}));