【问题标题】:Mathematica: Obtaining graphics primitives and directivesMathematica:获取图形基元和指令
【发布时间】:2011-06-19 04:21:06
【问题描述】:

如何从Graphics 对象中获取图形基元和指令? Leonid Shifrin 在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 现在是一个图形对象。如果您查看g2InputForm,您将看到该图形对象由Polygons 和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 和RGBColors 生成。它以某种方式设法错过了一种颜色,这就是为什么我们有一条黑线,然后其余的线有另一种颜色。另一个图像绘制正确,我们所做的只是删除了所有出现在其中的PolygonsThickness。我在这里做什么不同?我们不应该获得相同的地块吗?

【问题讨论】:

    标签: wolfram-mathematica mathematica-8


    【解决方案1】:

    我读到了:

    我想获得的是 简单的原语列表,我没有 希望他们在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]
    

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 2011-06-10
      • 2019-08-10
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多