Graphics
オブジェクトからグラフィックプリミティブとディレクティブはどうやって取得しますか?レオニード・シフリンは、ポストMathematica: Removing graphics primitivesでそれらを削除する方法を示しました。私は似たようなものを適用しようとしましたが、私が望むものを得ることができませんこの例を考えてみましょう:Mathematica:グラフィックプリミティブとディレクティブの取得
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, [email protected]}]
を次のように反復処理しようとすると、私たちは、私が代わりに取得したい何
{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
の内側にそれを望んでいません。左の画像が正しく描画されていることを
tmp1 = Cases[objs, (_JoinedCurve | _RGBColor), Infinity];
tmp2 = DeleteCases[objs, (_Polygon | _Thickness), Infinity];
GraphicsRow[{Graphics[tmp1], Graphics[tmp2]}]
注意:ここだけの線や色を取得1つの試みがあります。この画像は、JoinedCurve
秒とRGBColor
秒のみを使用して生成されました。それはどうにかして1つの色が欠けてしまったので、黒い線が残り、残りの色が他の色をしています。他の画像は正しく描画されていますが、ここに表示されたPolygons
とThickness
がすべて削除されています。ここで私は何をやっていますか?私たちは同じプロットを得るべきではありませんか?
画像が表示されません。 – gdelfino
イメージを再アップロードしました。 – jmlopez