Graphics
オブジェクトからグラフィック プリミティブとディレクティブをどのように取得しますか? Leonid Shifrin は、投稿Mathematica: Removal Graphics Primitivesでそれらを削除する方法を示しました。似たようなものを適用しようとしましたが、欲しいものが得られません。次の例を検討してください。
g1 = ListPlot3D[
{{0, -1, 0}, {0, 1, 0}, {-1, 0, 1}, {1, 0, 1}, {-1, 1, 1}},
Mesh -> {2, 2},
Boxed -> False,
Axes -> False,
ViewPoint -> {2, -2, 1},
ViewVertical -> {0, 0, 1},
MeshStyle -> RGBColor[0, 0.5, 0],
BoundaryStyle -> RGBColor[1, 0.5, 0]
];
g2 = ImportString[ExportString[g1, "PDF", Background -> None], "PDF"][[1]]
g2
グラフィックス オブジェクトになりました。InputForm
の を見るg2
と、このグラフィックス オブジェクトが と で構成されていることがわかりPolygon
ますJoinedCurve
。私がやりたいことは、 のすべてのプリミティブ オブジェクトを反復処理できるようにすることですg2
。次のように繰り返してみると
objs = First[g2];
Table[Head[objs[[i]]], {i, 1, Length@objs}]
私達は手に入れました
{Thickness, Polygon, Polygon, Polygon, Polygon, Style, Style, Style, Style,
Style, Style, Style, Style, Style, Style, Style, Style, Style, Style, Style,
Style, Style, Style, Style, Style, Style, Style, Style, Style, Style, Style,
Style, Style, Style, Style, Style, Style, Style, Style, Style, Style, Style,
Style, Style, Style}
代わりに取得したいのは、単純なプリミティブのリストです。内部には入れたくありませんStyles
。線と色のみを取得する 1 つの試みを次に示します。
tmp1 = Cases[objs, (_JoinedCurve | _RGBColor), Infinity];
tmp2 = DeleteCases[objs, (_Polygon | _Thickness), Infinity];
GraphicsRow[{Graphics[tmp1], Graphics[tmp2]}]
左の画像は間違って描かれていることに注意してください。この画像は と のみを使用して生成されJoinedCurve
ましRGBColor
た。どういうわけか 1 つの色を逃したため、黒い線があり、残りの線は他の色になっています。Polygons
もう一方の画像は正しく描画されています。そこに表示されていたとをすべて削除Thickness
しただけです。ここで私は何をしていますか?同じプロットを取得するべきではありませんか?