2011-06-19 8 views
3

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]] 

output

g2は現在、グラフィックオブジェクトです。 InputFormg2の場合、このグラフィックオブジェクトはPolygonJoinedCurveで構成されています。私がしたいことは、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]}] 

output

注意:ここだけの線や色を取得1つの試みがあります。この画像は、JoinedCurve秒とRGBColor秒のみを使用して生成されました。それはどうにかして1つの色が欠けてしまったので、黒い線が残り、残りの色が他の色をしています。他の画像は正しく描画されていますが、ここに表示されたPolygonsThicknessがすべて削除されています。ここで私は何をやっていますか?私たちは同じプロットを得るべきではありませんか?

+0

画像が表示されません。 – gdelfino

+1

イメージを再アップロードしました。 – jmlopez

答えて

4

私が読んで:私が代わりに取得したい何

は、単純なプリミティブの リストで、私は はStylesの内側にそれを望んでいません。

あなたは簡単に交換することによってそれを取得することができます:今、あなたが書く

First[ g2 /. Style[expr_, opts___] :> {opts, expr} ] 

ここだけ 線や色

を取得する試みの一つであります

Kno翼の内部構造g2は、その色でLineのオブジェクトだけを抽出するのは簡単です。すべてLine sはStyleでラップされているので、それも簡単です:

tmp3 = Cases[g2, 
    Style[{lines__Line}, ___, color_RGBColor, ___] :> {color, lines}, 
    Infinity]; 
Graphics[tmp3] 
関連する問題