如何從Graphics
對象獲取圖形原語和指令?列昂尼德Shifrin顯示如何刪除他們在後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
現在是一個圖形對象。如果您查看g2
的InputForm
,您會看到該圖形對象由Polygon
s和JoinedCurve
s組成。我想要做的就是遍歷所有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]}]
注意,左邊的圖像被錯誤地繪製。此圖片僅使用JoinedCurve
s和RGBColor
s生成。它以某種方式設法錯過一種顏色,這就是爲什麼我們有一條黑線,然後其餘的線條有另一種顏色。其他圖像繪製正確,我們所做的只是刪除那裏出現的所有Polygons
和Thickness
。我在這裏有什麼不同?我們不應該得到相同的地塊嗎?
圖片沒有顯示出來:因爲所有
Line
s的包裹Style
那麼就更簡單了。 – gdelfino我重新上傳了圖像。 – jmlopez