如何在处理

时间:2018-02-22 20:37:42

标签: java svg processing vector-graphics

我目前正在尝试挤出使用Adobe Illustrator中的SVG文件创建的PShape。我目前的方法+图片发布在下面:

  1. 创建基本图像形状
  2. 使用z offset
  3. 创建基本图像的副本
  4. 连接两个形状的每个顶点并使其成为QUAD_STRIP

    PShape group = createShape(GROUP); 
    //1. Create the base image shape   
    PShape s = createShape(0); //Base Shape
    //2. Create a copy of the base image with `z` offset
    PShape s2 = createShape(offset);
    //3. Connect each vertex from both shapes and make it a `QUAD_STRIP`
    PShape connect = connectShapes(s, s2, offset);
    group.addChild(s);
    group.addChild(s2);
    group.addChild(connect);
    shape(group, 0, 0, size, size);
    
    PShape createShape(int offset){
        PShape s = loadShape("logo.svg");
        s.translate(0,0,offset);
        return s;
    }
    
    PShape connectShapes(PShape normal, PShape extruded, int offset){
        PShape normalChild = normal.getChild(0);
        PShape extrudedChild = extruded.getChild(0);
    
        println("normalChild.getVertexCount(): " + normalChild.getVertexCount());
        println("extrudedChild.getVertexCount(): " + extrudedChild.getVertexCount());
    
        PShape s = createShape();
        s.beginShape(QUAD_STRIP);
        for (int i = 0; i < normalChild.getVertexCount(); i++) {
            PVector n = normalChild.getVertex(i);
            PVector e = extrudedChild.getVertex(i);
            s.vertex(n.x, n.y, 0);
            s.vertex(e.x, e.y, offset);
        }
        s.endShape();
        return s;
    }
    
  5. 我试图模仿......

    What I'm trying to mimic

    我的代码正在做什么......

    What is happening

    更新:

    添加了SVG source

1 个答案:

答案 0 :(得分:0)

最终图像似乎是根据PShape.getVertex(int i)的实现。徽标的圆形部分是Bézier曲线,由控制点表示,这些是getVertex返回的点。你需要的是获得曲线上的点。你可以通过例如:

实现这一目标
  1. 重新创建SVG,将Bézier曲线简化为线段,然后使用当前算法。例如,在Inkscape中,您可以使用Flatten Bézier command,例如:
  2. simplified SVG

    final result

    1. 使用其他库导入SVG,并使用Processing方法在2D中创建徽标形状,然后在3D中创建徽标形状。