Mathematica:获取图形基元和指令

2024-06-24

如何从图形基元和指令中获取图形基元和指令Graphics目的? Leonid Shifrin 在帖子中展示了如何删除它们Mathematica:删除图形基元 https://stackoverflow.com/questions/6317253/mathematica-removing-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 of g2你会看到这个图形对象是由Polygons and JoinedCurves。我想做的是能够迭代所有原始对象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。这是仅获取线条和颜色的一种尝试:

 tmp1 = Cases[objs, (_JoinedCurve | _RGBColor), Infinity];
 tmp2 = DeleteCases[objs, (_Polygon | _Thickness), Infinity];
 GraphicsRow[{Graphics[tmp1], Graphics[tmp2]}]

请注意,左侧的图像绘制不正确。该图像仅使用生成JoinedCurves and RGBColors。它以某种方式错过了一种颜色,这就是为什么我们有一条黑线,然后其余的线有另一种颜色。另一张图像绘制正确,我们所做的就是删除所有Polygons and Thickness出现在那里。我在这里做了什么不同的事情?我们不应该获得相同的地块吗?


I read:

我想获得的是 简单原语列表,我不 想要他们进去Styles.

只需简单替换即可获得:

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

现在你写:

这是一种仅获取 线条和颜色

了解内部结构g2很简单,只需提取Line物体及其颜色。甚至更简单,因为所有Lines 包裹着Style:

tmp3 = Cases[g2, 
   Style[{lines__Line}, ___, color_RGBColor, ___] :> {color, lines}, 
   Infinity];
Graphics[tmp3]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mathematica:获取图形基元和指令 的相关文章

随机推荐