Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Note that this is not a duplicate of the question over there. That one asks for a given point, while I'm asking about the lexical structure (which, of course, is not directly related to any point in the final graphics).

What I want to know is whether there's a way to access the currently set colour. For example, let's assume I write the following function:

mydisk[p_,r_]:={EdgeForm[Darker[CurrentColor]],Disk[p,r]}

and then use it like this:

Graphics[{Red, mydisk[{0,0},1], Green, mydisk[{1,1},1]}]

it should be equivalent to

Graphics[{Red, {EdgeForm[Darker[Red]], Disk[{0,0},1]},
          Green, {EdgeForm[Darker[Green]], Disk[{1,1},1]}}]

Is this possible, and if so, what would I write in the place of CurrentColor?

share|improve this question
1  
+1, good question! I wanted to ask this myself at some point. This will come up when trying to convert a Mathematica Graphics-expression to some other format (e.g. export to some special format). –  Szabolcs May 4 '12 at 13:22
add comment

1 Answer 1

up vote 31 down vote accepted

CurrentValue["Color"] seems to be doing the trick (not documented).

mydisk[p_, r_] := {Dynamic[EdgeForm[Darker[CurrentValue["Color"]]]], 
  Disk[p, r]}

Dynamic is needed because the value has to be evaluated by FrontEnd at the time of rendering. Here is the result:

Graphics[{EdgeForm[AbsoluteThickness[10]], Red, mydisk[{0, 0}, 1], 
  Green, mydisk[{1, 1}, 1]}]

enter image description here

CurrentValue is like a box of chocolate. It has a lot of features (mostly FE callbacks), many undocumented, but usually a very present surprise when it works.

A few other items that work with CurrentValue: "Thickness", "Opacity", "Dashing", "FontFamily", "FontSize", "FontSlant", "FontWeight", "FontColor" and "FontOpacity".

share|improve this answer
    
A real treat, that! –  Yves Klett May 4 '12 at 15:04
11  
Great solution. Some experiments show that other values which can be accessed with CurrentValue are "Thickness", "Opacity", "Dashing", "FontFamily", "FontSize", "FontSlant", "FontWeight", "FontColor" and "FontOpacity". –  celtschk May 4 '12 at 15:19
    
I updated the post with @celtschk's findings. This information is too valuable to keep it in a volatile comment that may disappear any day. –  Szabolcs May 10 '12 at 15:00
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.