Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以将jcsg库与处理一起使用? P>加工是一个创造性的编码平台——语言、IDE和生态系统——由加工社区维护并在加工基础的支持下进行。处理Java模式通常可以受益于Java库中的代码_Java_Processing_Csg - Fatal编程技术网

是否可以将jcsg库与处理一起使用? P>加工是一个创造性的编码平台——语言、IDE和生态系统——由加工社区维护并在加工基础的支持下进行。处理Java模式通常可以受益于Java库中的代码

是否可以将jcsg库与处理一起使用? P>加工是一个创造性的编码平台——语言、IDE和生态系统——由加工社区维护并在加工基础的支持下进行。处理Java模式通常可以受益于Java库中的代码,java,processing,csg,Java,Processing,Csg,JCSG是基于BSP的CSG(Constructional Solid Geometry)的Java实现。单从处理过程中可以跨越的障碍很少,但是,是的,您可以在处理过程中使用任何Java库。(只需将library.jar拖到保存的草图上即可) 首先,您需要编译.jar库和.jar库来运行示例代码 要做到这一点,你需要。如果您使用了Android SDK/Android Studio/IntelliJ/etc,您可以从头开始安装,也可以从系统中使用现有安装 如上所述,在OSX/Linux/etc上

JCSG是基于BSP的CSG(Constructional Solid Geometry)的Java实现。

单从处理过程中可以跨越的障碍很少,但是,是的,您可以在处理过程中使用任何Java库。(只需将library.jar拖到保存的草图上即可)

首先,您需要编译.jar库和.jar库来运行示例代码

要做到这一点,你需要。如果您使用了Android SDK/Android Studio/IntelliJ/etc,您可以从头开始安装,也可以从系统中使用现有安装

如上所述,在OSX/Linux/etc上,从每个库文件夹运行:

bash gradlew assemble
在Windows上运行:

gradlew assemble
在我的例子中,我使用了Android Studio附带的Gradle安装,我在mac上有:

bash /Applications/IDEsAndEditors/Android\ Studio.app/Contents/plugins/android/lib/templates/gradle/wrapper/gradlew assemble
编译完.jar文件后,只需将它们放入保存的处理草图中即可。这将创建一个
code
文件夹。在此阶段,您可以使用该草图中的库

(提示:转到处理>首选项并使用Ctrl+Space启用代码完成,以便更容易查看可用的方法和属性(IDE,如eclipse/IntelliJ/NetBeans/等。默认情况下这样做))

我已经做了一个快速测试,但是处理的内置pshapeobj加载程序无法解析JCSG保存的OBJ文件

import java.nio.file.Paths;

PShape csgResult;

void setup(){
  size(900,900,P3D);
  // we use cube and sphere as base geometries
  CSG cube = new Cube(2).toCSG();
  CSG sphere = new Sphere(1.25).toCSG();

  // perform union, difference and intersection
  CSG cubePlusSphere = cube.union(sphere);
  CSG cubeMinusSphere = cube.difference(sphere);
  CSG cubeIntersectSphere = cube.intersect(sphere);

  // translate geometries to prevent overlapping 
  CSG union = cube.
          union(sphere.transformed(Transform.unity().translateX(3))).
          union(cubePlusSphere.transformed(Transform.unity().translateX(6))).
          union(cubeMinusSphere.transformed(Transform.unity().translateX(9))).
          union(cubeIntersectSphere.transformed(Transform.unity().translateX(12)));

  // save union as stl
  try {
      FileUtil.write(
              Paths.get(sketchPath("sample.obj")),
              union.toObjString()
      );
  } catch (IOException ex) {
      ex.printStackTrace();
  }

  //load shape into Processing
  csgResult = loadShape(sketchPath("sample.obj"));

}

void draw(){
  background(0);
  translate(width * 0.5, height * 0.5,0);
  scale(sin(frameCount * 0.1) * 100);
  if(csgResult != null){
    shape(csgResult);
  }
}
我做了测试,顶点在那里,面通过以下方式丢失:

尝试加载STL格式和不同的处理库, 否则,访问顶点并在处理过程中直接绘制它们,考虑到JSCG和处理之间的单位/比例不同:

import java.nio.file.Paths;

CSG union;

void setup(){
  size(900,900,P3D);
  stroke(255);
  //strokeWeight(3);
  // we use cube and sphere as base geometries
  CSG cube = new Cube(2).toCSG();
  CSG sphere = new Sphere(1.25).toCSG();

  // perform union, difference and intersection
  CSG cubePlusSphere = cube.union(sphere);
  CSG cubeMinusSphere = cube.difference(sphere);
  CSG cubeIntersectSphere = cube.intersect(sphere);

  // translate geometries to prevent overlapping 
  union = cube.
          union(sphere.transformed(Transform.unity().translateX(3))).
          union(cubePlusSphere.transformed(Transform.unity().translateX(6))).
          union(cubeMinusSphere.transformed(Transform.unity().translateX(9))).
          union(cubeIntersectSphere.transformed(Transform.unity().translateX(12)));

}

void drawCSG(CSG mesh,float scale){
  beginShape(POINTS);
  for(Polygon p : mesh.getPolygons()){
    for(Vertex v : p.vertices){
      vertex((float)v.pos.getX() * scale,(float)v.pos.getY() * scale,(float)v.pos.getZ() * scale);
    }
  }
  endShape();
}

void draw(){
  background(0);
  translate(width * 0.5, height * 0.5,0);
  rotateY(map(mouseX,0,width,-PI,PI));
  rotateX(map(mouseY,0,height,PI,-PI));

  drawCSG(union,sin(frameCount * 0.01) * 100);
}

您可以下载上面的草图(带有预编译的库)(以及JCSG生成的文档)。请务必阅读库的文档/源代码以获得更高级的使用

更新:为了提高效率,您可以在设置中使用创建一组对象,然后只需在
draw()
中进行渲染(与我前面的示例不同,该示例会一次又一次地遍历所有多边形和顶点):

// the PShape reference which will contain the converted 
PShape csgResult;

void setup(){
  size(900,900,P3D);
  noStroke();
  // JCSG sample code:
    // we use cube and sphere as base geometries
    CSG cube = new Cube(2).toCSG();
    CSG sphere = new Sphere(1.25).toCSG();

    // perform union, difference and intersection
    CSG cubePlusSphere = cube.union(sphere);
    CSG cubeMinusSphere = cube.difference(sphere);
    CSG cubeIntersectSphere = cube.intersect(sphere);

    // translate geometries to prevent overlapping 
    CSG union = cube.
            union(sphere.transformed(Transform.unity().translateX(3))).
            union(cubePlusSphere.transformed(Transform.unity().translateX(6))).
            union(cubeMinusSphere.transformed(Transform.unity().translateX(9))).
            union(cubeIntersectSphere.transformed(Transform.unity().translateX(12)));

    // translate merged geometry back by half the total translation to pivot around centre
    union = union.transformed(Transform.unity().translateX(-6));

  // Convert CSG to PShape -> Note: CSG units are small so we scale them up so the shapes are visible in Processing
  csgResult = CSGToPShape(union,45);
}
// re-usable function to convert a CSG mesh to a Processing PShape
PShape CSGToPShape(CSG mesh,float scale){
  // allocate a PShape group
  PShape csgResult = createShape(GROUP);
  // for each CSG polygon (Note: these can have 3,4 or more vertices)
  for(Polygon p : mesh.getPolygons()){
    // make a child PShape
    PShape polyShape = createShape();
    // begin setting vertices to it
    polyShape.beginShape();
    // for each vertex in the polygon
    for(Vertex v : p.vertices){
      // add each (scaled) polygon vertex 
      polyShape.vertex((float)v.pos.getX() * scale,(float)v.pos.getY() * scale,(float)v.pos.getZ() * scale);
    }
    // finish this polygon
    polyShape.endShape();
    //append the child PShape to the parent
    csgResult.addChild(polyShape);
  }
  return csgResult;
}

void draw(){
  background(0);
  lights();
  translate(width * 0.5, height * 0.5,0);
  rotateY(map(mouseX,0,width,-PI,PI));
  rotateX(map(mouseY,0,height,PI,-PI));
  shape(csgResult);
}