Saltar al contenido

Rellena el objeto en TikZ y haz que el área sea transparente

Posterior a de nuestra extensa compilación de información pudimos resolver esta duda que suelen tener ciertos los usuarios. Te compartimos la solución y nuestro objetivo es servirte de mucha ayuda.

Solución:

Descargo de responsabilidad:

Horrible, horrible truco. Por favor, perdóname, considéralo solo como una prueba de concepto …

La salida:

Resultado

El truco:

  1. Dibuja (sin dibujarla realmente) la estrella, incluidos los nodos numerados que en realidad están dibujados y nombrados, para luego obtener sus coordenadas de borde.
  2. Clip a una forma con agujeros. El contorno de la forma es el cuadro delimitador actual (establecido en el paso 1). Los agujeros son los bordes rectangulares de los nodos numerados y la ruta triangular. Estos se definen en sentido contrario a las agujas del reloj, de modo que se “restan” de la forma.
  3. Dibuja de nuevo los bordes en forma de estrella. Como resultado del paso 2, nuestro lienzo actual tiene “agujeros” en los que desaparecen las líneas dibujadas.
  4. Restablece el área de recorte y dibuja el triángulo interior.

Para restablecer el área de recorte en 4, es suficiente realizar los pasos 2 y 3 dentro de un alcance.

El código:

documentclass[a5paper]article
usepackagetikz
usepackagebackground
backgroundsetup
scale=1,
angle=0,
opacity=1,
contents=begintikzpicture[remember picture,overlay]
 path [left color = black, right color = white] (current page.south west)rectangle (current page.north east);   % Adjust the position of the logo.
endtikzpicture
begindocument

centering
begintikzpicture
    % Draw and name the nodes
    foreach x in 0,...,5
      path (0,0) to[bend right] node [pos=0.8,fill=none,name=nx] x (60*x+30:3) ;
      
    % Scope in which the curved lines are drawn
    beginscope
        % Define clipping geometry with holes
        clip (current bounding box.south west) rectangle (current bounding box.north east)
              foreach x in 0,...,5   (nx.south east) rectangle (nx.north west) 
              (20:1) -- (140:1) -- (260:1) -- (20:1);
        % Draw curves
        foreach x in 0,...,5
          draw (0,0) to[bend right] (60*x+30:3) ;
    endscope
    % Reset clipping (when scope is exited)
    % Draw triangle
    draw[fill=none] (20:1) -- (140:1) -- (260:1) -- cycle;
    draw (0,0) node[align=center] Center;
endtikzpicture
enddocument

Actualizar

Para mayor diversión y fealdad:

% Same preamble...
usepackagelipsum
begindocument
lipsum[6]lipsum[6]lipsum[6]
begintikzpicture[remember picture, overlay, shift=(current page.center), blue, thick]
  % Same drawing code...
endtikzpicture
enddocument

Da:

Resultado

Podrías hacer la imagen completa como un desvanecimiento

documentclass[border=5]standalone
usepackagetikz
usetikzlibraryfadings
begintikzfadingfrompicture[name=figure]
foreach x in 0,...,5
  draw [pgftransparent!0] (0,0) to [bend right] 
    node [fill=pgftransparent, pos=0.8, text=pgftransparent!0] x (60*x+30:3);
draw [draw=pgftransparent!0, fill=pgftransparent] 
  (20:1) -- (140:1) -- (260:1) -- cycle;
draw [draw=pgftransparent!0]
  (0,0) node[align=center, text=pgftransparent!0] Center;
endtikzfadingfrompicture
begindocument
tikzpath[bottom color=red!20, top color=blue!20, middle color=green!20,
  postaction=fill=black, path fading=figure, fit fading=false] 
  (-3.5, -3.5) rectangle (3.5,3.5);
enddocument

ingrese la descripción de la imagen aquí

Colocar la imagen sobre el texto es bastante simple, solo recuerde configurar el fading transform así como:

documentclassarticle
usepackagetikz,lipsum
usetikzlibraryfadings
begintikzfadingfrompicture[name=figure]
foreach x in 0,...,5
  draw [pgftransparent!0] (0,0) to [bend right] 
    node [fill=pgftransparent, pos=0.8, text=pgftransparent!0] x (60*x+30:3);
draw [draw=pgftransparent!0, fill=pgftransparent] 
  (20:1) -- (140:1) -- (260:1) -- cycle;
draw [draw=pgftransparent!0]
  (0,0) node[align=center, text=pgftransparent!0] Center;
endtikzfadingfrompicture
begindocument
lipsum[1]lipsum[2]lipsum[3]lipsum[4]
tikz[remember picture, overlay, 
  shift=(current page.center), fading transform=shift=(current page.center)]
path[fill=red, path fading=figure, fit fading=false] 
  (-3.5, -3.5) rectangle (3.5,3.5);
enddocument

Parte del resultado (después de dos cumplimientos):

ingrese la descripción de la imagen aquí

También es posible obtener automáticamente el cuadro delimitador del desvanecimiento. Para ello, se utiliza un truco que significa que la imagen que compone el desvanecimiento se especifica en línea.

documentclassarticle
usepackagetikz,lipsum
usetikzlibraryfadings
newboxfadingbox
tikzset
  shift fading/.style=shift=#1, fading transform=shift=#1,
  use as fading/.style=%
    /utils/exec=%
      pgfinterruptpicture
      globalsetboxfadingbox=hboxpgfpicture#1endpgfpicture%
      begintikzfadingfrompicture[[email protected]]
        pgftextcopyfadingbox
      endtikzfadingfrompicture%
      endpgfinterruptpicture,
    path [email protected], fit fading=false,
    insert path=%
        (-wdfadingbox/2, -htfadingbox/2-dpfadingbox/2)
        rectangle ++(wdfadingbox, htfadingbox+dpfadingbox)

begindocument
lipsum[1]lipsum[2]lipsum[3]lipsum[4]
tikz[remember picture, overlay, shift fading=(current page.center)]
path [fill=blue, use as fading=
  foreach x in 0,...,5
    draw [transparent!0] (0,0) to [bend right] 
      node [fill=transparent, pos=0.8, text=transparent!0] x (60*x+30:3);
  draw [draw=transparent!0, fill=transparent] 
    (20:1) -- (140:1) -- (260:1) -- cycle;
  draw [draw=transparent!0]
    (0,0) node[align=center, text=transparent!0] Center;
  ];
enddocument

ingrese la descripción de la imagen aquí

Solo fill usando el mismo color de fondo que en su mdframed medio ambiente. Es decir, fill=black!10. Esto produce:

ingrese la descripción de la imagen aquí

Aquí está el código completo:

documentclassarticle
usepackagemdframed   % for framing
usepackagetikz
begindocument

beginmdframed[backgroundcolor=black!10]
centering
begintikzpicture
foreach x in 0,...,5
draw (0,0) to[bend right] node [pos=0.8,fill=black!10] x (60*x+30:3) ;
draw[fill=black!10] (20:1) -- (140:1) -- (260:1) -- cycle;
draw (0,0) node[align=center] Center;
endtikzpicture
endmdframed

enddocument

valoraciones y comentarios

Si piensas que ha resultado útil este artículo, sería de mucha ayuda si lo compartes con otros juniors de este modo contrubuyes a extender este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *