我的问题与风力和 tikz 力。
感谢 Mark Wibrow,我有一些不错的风力涡轮机,但我想缩放它们并进行一些动态更改。我尝试使用一些新参数,但没有用。我只是在他的原始代码中添加了以下内容:
\tikzset{path/.style args={#1 scale #2}{fill, draw=white, ultra thick, line join=round}}
\begin{scope}[scale=#2]
\path [path]
(-.25,0) arc (180:360:.25 and .0625) -- (.0625,3) -- (-.0625,3) -- cycle;
...
\end{scope}
和
它不起作用:
<argument> ...set {path/.style args={##1 scale ##2
}{fill, draw=white, ultra ...
l.418 }}
编辑感谢 Ignasi 的帮助,已解决:
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{calc}
\tikzset{
pics/mysymbol/.style args={#1 scale #2 with #3}{
code={
\tikzset{WinT/.style={%
fill,draw=white,line join=round,#3}}
\begin{scope}[scale=#2]
\path[WinT] (-.25,0) arc (180:360:.25 and .0625)
-- (.0625,3) -- (-.0625,3) -- cycle;
\pgfmathsetmacro{\Rand}{(rand*60 + 1) - 30}
\foreach \i in {90, 210, 330}{
\ifcase#1
\or
\path [WinT, shift=(90:3), rotate=\i+\Rand]
(.5,-.1875) arc (270:90:.5 and .1875)
arc (90:-90:1.5 and .1875);
\or
\path [WinT, shift=(90:3), rotate=\i+\Rand]
(0,0.125) -- (2,0.125) -- (2,0) -- (0.5,-0.375) -- cycle;
\or
\path [WinT, shift=(90:3), rotate=\i+\Rand]
(0,-0.125) arc (180:0:1 and 0.125) -- ++(0,0.125)
arc (0:180:1 and 0.25) -- cycle;
\fi
}
\path [WinT] (0,3) circle [radius=.25];
\end{scope}
}}}
\begin{document}
\begin{tikzpicture}[scale=0.4]
\draw[help lines] (0,-2) grid (20,20) ;
\draw[fill=blue!50, opacity=.5] (1,0) arc (180:90:18) -- ++(0,-2)
arc (90:180:16) --cycle ;
\draw[<->,>=stealth,thick] (1,-1)--(3,-1) node[midway,below]
{\scriptsize 200\,m} ;
\foreach \i in {13,12,...,0} {%
\begin{scope}[shift={($(19,0) + (176-\i*6.35:16.9)$)}]
\path (0,0) pic {mysymbol={1 scale .25 with thick}} ;
\end{scope}
}
\end{tikzpicture}\end{document}
答案1
TikZ
文档解释(第 18.3 节)pics
使用语法定义的
\tikzset{
pics/picname/.style={
code={
<pic commands>},
}
}
尽管提供了密钥处理程序.pic
以允许使用替代的更简单的版本
\tikzset{
picname/.pic={
<pic commands> },
}
但TikZ
文献也说:
在几乎所有情况下,
.pic
密钥处理程序都足以设置密钥。但是,有些情况下你确实需要使用第一个版本,使用.style
和code=:
- 每当您的图片类型需要设置前景或背景代码时。
- 如果对密钥给出了复杂的参数。
因此,您必须更改wind turbine
声明以使用第一个(完整)语法来传递复杂的参数。