Re: tikz creare macro

#79367
Up
0
Down
::

warcomeb” post=78680Ciao Claudio, scusami se rompo ancora (volendo mi puoi mandare a quel paese e non mi offendo 🙂 ).
Pensavo che forse i classmark per il resto del disegno possono in alcuni casi risultare scomodi… non si potrebbero impostare delle ancore o qualcosa del genere? (ad esempio in ps_kernel il pallino non ci andrebbe, ma ci dovrebbe terminare la freccia)

Ciao
Marco

Sai che in realtà ci avevo già pensato questa mattina proprio a questo problema? Poi ti ho dato la soluzione “veloce” per mancanza di tempo.

Ci tengo a precisare che i markers definiti con [tt]classmark[/tt] sono esattamente delle ancore a cui si fa riferimento in un secondo momento, quindi tutto ciò prescinde da un eventuale inserimento di frecce. Anche con gli attuali [tt]classmark[/tt] si può definire un segmento con una freccia; questo tipo di markers è stato definito così soltanto per soddisfare l’esigenza di avere dei pallini come mostrava la figura nel primo intervento del filone. Nulla vieta di definirsi un secondo tipo di markers, invisibili. Ecco come credo tu abbia in mente l’esempio:
`\documentclass[a4paper,10pt,twocolumn]{IEEEtran}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% COMANDI VARI PER LE IMMAGINI
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{calc,positioning}

\newcommand{\bigpicsize}[1]{\footnotesize{#1}}
\newcommand{\picsize}[1]{\scriptsize{#1}}
\newcommand{\picsizett}[1]{\scriptsize{\texttt{#1}}}
\newcommand{\smallpicsize}[1]{\tiny{#1}}

\pgfmathtruncatemacro{\classwidth}{3}
\pgfmathtruncatemacro{\classheight}{2}
\newcommand{\setclasswidth}[1]{\pgfmathtruncatemacro{\classwidth}{#1}}
\newcommand{\setclassheight}[1]{\pgfmathtruncatemacro{\classheight}{#1}}

\tikzset{class/.style args={#1 and #2}{
rectangle,draw,rounded corners,thick,minimum width=#1, minimum height=#2
}
}

\tikzset{classinside/.code n args={3}{%
\node at ($(#1.north)+(0,-0.30)$){\picsizett{#2}};
\draw($(#1.north west)+(0,-0.60)$)–($(#1.north east)+(0,-0.60)$);
\node[yshift=-\classheight,text width=\classwidth cm,align=center] at (#1){#3};
}
}

% DRAWCLASS
% #1 – Coordinate
% #2 – Label
% #3 – Nome Classe
% #4 – Contenuto
\NewDocumentCommand{\drawclass}{d() m m m}{
\IfNoValueTF{#1}{%true
\node[class=\classwidth cm and \classheight cm,name=#2]{};
}
{%false
\node[class=\classwidth cm and \classheight cm,name=#2]at(#1){};
}
\node[classinside={#2}{#3}{#4}]{};
}

\NewDocumentCommand{\classmark}{o m}{%
\IfNoValueTF{#1}{%true
\tikz[overlay,remember picture,baseline=-0.5ex,xshift=-0.3 cm] \node[draw,fill=black,circle,scale=0.05] (#2) {};
}
{%false
\tikz[overlay,remember picture,baseline=-0.5ex,xshift=#1 cm] \node[draw,fill=black,circle,scale=0.05] (#2) {};
}
}

\NewDocumentCommand{\invisiblemark}{o m}{%
\IfNoValueTF{#1}{%true
\tikz[overlay,remember picture,baseline=-0.5ex,xshift=-0.3 cm] \node[scale=0.05] (#2) {};
}
{%false
\tikz[overlay,remember picture,baseline=-0.5ex,xshift=#1 cm] \node[scale=0.05] (#2) {};
}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}

\begin{figure*}[tb]
\centering
\begin{tikzpicture}[scale=0.8]

%\draw[help lines,yshift=-15cm] (0,0) grid (20,15);

% SYSTEMC
\node

at (18,0.25) {\bigpicsize{SystemC design}};
\draw [dashed] (2,0) rectangle (18,-3);

\drawclass(5,-1.5){m1}{sc\_module}{\vdots \\ \classmark{m1init}\picsizett{ps\_init()}}

\drawclass(10,-1.5){m2}{sc\_module}{\vdots \\ \classmark{m2init}\picsizett{ps\_init()}}

\drawclass(15,-1.5){m3}{sc\_module}{\vdots \\ \classmark{m3init}\picsizett{ps\_init()}}

\setclasswidth{5}
\drawclass(10,-5){pskernel}{\invisiblemark[0]{pskernelinit}ps\_kernel }{\vdots}
\end{tikzpicture}
\begin{tikzpicture}[scale=0.8,remember picture,overlay]
\draw (m1init.center) — ($(m1init)-(0,1.25)$)-|(m2init.center) — ($(m2init)-(0,1.25)$)-| (m3init.center);
\draw[<-,>=latex] (pskernelinit.center) |-($(m2init)-(0,1.25)$);
\end{tikzpicture}

\caption{Scheme of the interaction of Powersim with a SystemC design.}
\label{fig:powersim}
\end{figure*}

\end{document}` Nota come il segmento con la freccia in questione sia stato definito:`\draw[<-,>=latex] (pskernelinit.center) |-($(m2init)-(0,1.25)$);` Gli [tt]\invisiblemark[/tt] sono esattamente uguali ai [tt]classmark[/tt] a meno del pallino. Ripeto, comunque, che i markers sono utili in questo caso proprio perché non si conosce a prescindere la posizione del testo a cui si vuole indirizzare la connessione. Se invece ti servivano solo creare delle connessioni a partire dalla forma [tt]classe[/tt] avresti potuto farne a meno.

Ciao
Claudio

Go to top