# How to rotate a picture without changing the label properties?

``````import graph;
import patterns;
size(300);
pair O=(0.3,-1),M=(2,.5);
real f1(real x) {return 2*cos(x);}
path Cf1=graph(f1,-3.14,3.14,n=400);
path c1=circle(O,abs(O-M));
pair[] t=intersectionpoints(Cf1,c1);
dot("\$t[0]\$",t[0],W,blue);
dot("\$t[1]\$",t[1],NW,green);
dot("\$t[2]\$",t[2],NE,red);
dot("\$t[3]\$",t[3],orange);
real[][] A = intersections(Cf1,c1);
path kn10=subpath(c1,A[1][1],A[0][1]);
path kn21=subpath(c1,A[2][1],A[1][1]);
path kn01=subpath(Cf1,A[0][0],A[1][0]);
path kn12=subpath(Cf1,A[1][0],A[2][0]);
path kn23=subpath(Cf1,A[2][0],A[3][0]);
fill(kn01--kn10--cycle,red+opacity(.5));
fill(kn21--kn12--cycle,green+opacity(.5));
fill(kn21--kn12--cycle,pattern("hatchback"));
fill(arc(O,t[3],t[2])--kn23--cycle,blue+opacity(.5));
fill(kn01--reverse(arc(O,t[2],t[1]))--kn23--reverse(arc(O,t[0],t[3]))--cycle,pattern("Hatchback"));
draw(Cf1^^c1);
``````

My question: How to rotate `this` picture without changing the label properties?

I mean:

my output

but I want it like this

• You need to save the rotation angle and un-rotate the text by the same amount. The nodes themselves should not use things like {above left] as they may also be un-rotated. Mar 1, 2020 at 15:10

The `Label` command has an `embed` option. Following the documentation, the embed argument determines how the Label should transform with the embedding picture. By default it is `Rotate`, that is only shift and rotate with embedding picture.

Another possible values are `Shift`, `Slant`, `Scale` and `Rotate(pair z)`.

For the question `Shift` is relevant since it corresponds to only shift with embedding picture.

The following code produces the initial picture and a rotated version where only the labels `t[1]` and `t[2]` are rotated.

``````      import graph;
import patterns;

size(300);
pair O=(0.3,-1),M=(2,.5);
real f1(real x) {return 2*cos(x);}
path Cf1=graph(f1,-3.14,3.14,n=400);
path c1=circle(O,abs(O-M));
pair[] t=intersectionpoints(Cf1,c1);
dot(Label("\$t[0]\$",embed=Shift),t[0],W,blue);
dot(Label("\$t[1]\$"),t[1],NW,green);
dot(Label("\$t[2]\$"),t[2],NE,red);
dot(Label("\$t[3]\$",embed=Shift),t[3],orange);
real[][] A = intersections(Cf1,c1);
path kn10=subpath(c1,A[1][1],A[0][1]);
path kn21=subpath(c1,A[2][1],A[1][1]);
path kn01=subpath(Cf1,A[0][0],A[1][0]);
path kn12=subpath(Cf1,A[1][0],A[2][0]);
path kn23=subpath(Cf1,A[2][0],A[3][0]);
fill(kn01--kn10--cycle,red+opacity(.5));
fill(kn21--kn12--cycle,green+opacity(.5));
fill(kn21--kn12--cycle,pattern("hatchback"));
fill(arc(O,t[3],t[2])--kn23--cycle,blue+opacity(.5));
fill(kn01--reverse(arc(O,t[2],t[1]))--kn23--reverse(arc(O,t[0],t[3]))--cycle,pattern("Hatchback"));
draw(Cf1^^c1);

picture pic1;
size(pic1,300);

shipout("rotate_example",pic1);
``````

and the result

As observed by Justonly, to avoid extra output creation replace `shipout("rotate_example",pic1);` by the command `shipout(bbox(pic1,2mm,invisible));`

Another possibility is first to create a picture `pic1` and then to add `pic1` to the currentpicture.

• Excuse me, the `shipout("rotate_example",pic1);` command make two outputs (one is `rotate_example.pdf`- this file is needed, one is `<the current name file>.pdf`-this file is no change). So, it is true?. Because if I replace it by (such as) `shipout(bbox(pic1,2mm,invisible));`, it display one output!
– user197952
Mar 3, 2020 at 1:43
• @justonly yes you're right
– O.G.
Mar 3, 2020 at 7:48