warcomeb” post=78693`\begin{figure*}[tb]
\centering
% \begin{tikzpicture}[scale=0.8,remember picture,overlay]
\begin{tikzpicture}[scale=0.8]\draw[help lines,yshift=-15cm] (0,0) grid (20,15);
% SYSTEMC
\nodeat (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}
\setclassheight{3}\drawclass(10,-6){pskernel}{ps\_kernel}{%
\invisiblemark[0]{addmodule} \picsizett{add\_module\_to\_powersim()} \\
\begin{tabular}{|c|l|}
\hline
M1 & \picsizett{ps\_module} for M1 \\
\hline
M2 & \picsizett{ps\_module} for M2 \\
\hline
M3 & \picsizett{ps\_module} for M3 \classmark[0.3]{m3module} \\
\hline
\end{tabular}
\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] (addmodule.center) |-($(m2init)-(0,1.25)$);
\end{tikzpicture}\caption{Scheme of the interaction of Powersim with a SystemC design.}
\label{fig:powersim}
\end{figure*}`forse sto impazzendo… ma alcune cose non le capisco. Ho messo la tabella all’interno della classe ps_kernel ma
1) non riesco a trovar nessun modo per distanziarla dalla scritta sopra
2) se ci aggiungo i puntini con \vdots me li sposta tutto a destra (e proprio non ho capito perché
3) Il mark nell’ultima riga della tabella è immenso rispetto a quelli presenti nelle classi sopra, ma non capisco perché dato che le condizioni sono le stesse…Tikz non è proprio semplice come pensavo… 😳 o meglio, i disegni che ho fatto con coordinate assolute mi sono venuti facili e bene al primo colpo, questo invece mi sta facendo dannare!
help me!
Marco
Sicuramente se pensavi che usare TikZ per disegnare in modo automatico figure come quella di riferimento fosse banale eri fuori strada, ma credo te ne sia reso conto. Ecco perché nel mio ripensandoci ti ri-consigliavo caldamente di sfruttare almeno uno dei due pacchetti per alleggerire il carico di lavoro. Oltretutto ho dato un’occhiata al codice ed è fatto bene, specialmente TikZ-UML, con la definizione delle chiavi che aiuta un sacco. Detto molto onestamente, le mie soluzioni sono tutte dei workaround che, con la definizione di apposite chiavi, sarebbero decisamente migliorabili. Ho già iniziato a studiarle, ma non sono ancora abbastanza sicuro dei miei tentativi. Comunque sia, visto che ormai abbiamo definito un po’ di cose, possiamo andare avanti con questa strada.
Ho ridefinito il comando [tt]\classmark[/tt] in modo tale che sia possibile personalizzare il fattore di scala e, quindi, aumentare o diminuire la dimensione del cerchio. Ovviamente il comando è compatibile con il resto del codice già scritto. Eccone la sintassi:`
\NewDocumentCommand{\classmark}{o m O{0.05}}{%
\IfNoValueTF{#1}{%true
\tikz[overlay,remember picture,baseline=-0.5ex,xshift=-0.3 cm] \node[draw,fill=black,circle,scale=#3] (#2) {};
}
{%false
\tikz[overlay,remember picture,baseline=-0.5ex,xshift=#1 cm] \node[draw,fill=black,circle,scale=#3] (#2) {};
}
}
` ora il terzo comando è opzionale con valore di default a 0.05 (in questo c’è compatibilità) per cui se non lo inserisci viene usato il valore di default.
L’esempio rivisto (troverai il codice commentato per capire come sistemare la tabella: nulla legato a TikZ, ma semplice codice LaTeX):
`\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 O{0.05}}{%
\IfNoValueTF{#1}{%true
\tikz[overlay,remember picture,baseline=-0.5ex,xshift=-0.3 cm] \node[draw,fill=black,circle,scale=#3] (#2) {};
}
{%false
\tikz[overlay,remember picture,baseline=-0.5ex,xshift=#1 cm] \node[draw,fill=black,circle,scale=#3] (#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,remember picture,overlay]
\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}
\setclassheight{3}
\drawclass(10,-6){pskernel}{ps\_kernel}{%
\\[2ex] % sposto come voglio il testo
\invisiblemark[0]{addmodule}\picsizett{add\_module\_to\_powersim()} \\[2ex]
\begin{tabular}{|c|l|}
\hline
M1 & \picsizett{ps\_module} for M1 \\
\hline
M2 & \picsizett{ps\_module} for M2 \\
\hline
M3 & \picsizett{ps\_module} for M3 \classmark[0.2]{m3module}[0.03] \\
\hline
\end{tabular}\\
\hspace{0.5\classwidth em}\vdots % andando a capo sembra si perda l'allineamento centrale
% per cui sposto di un valore pari a 1/2 della dimensione della classe
}
\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] (addmodule.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}`I miei fix sono penosi: se fai caso ai warning e li vuoi evitare siamo fritti 😉
Il risultato:
[attachment=484]Immagine_2012-10-05-2.jpg[/attachment]
Ciao
Claudio