2016-02-26 2 views
3

Так что у меня возникли проблемы с размещением меньших коробок в большую (контейнер). Я попытался получить координаты вершины из коробки и поместить другую в эту позицию. Вот код, который я попробовал:Загрузка меньших ящиков в большую версию в Java3D

Shape3D backShape = ((Box) buildShape(x, y, z)).getShape(Box.RIGHT); 

    GeometryArray geo=(GeometryArray)backShape.getGeometry(); 
    float[] position=new float[3]; 
    geo.getCoordinate(0, position); 
    System.out.println(position[0]+" "+position[1]+" "+position[2]); 
    Vector3f pp = new Vector3f (position[0],position[1], position[2]); 

    Color3f c1=new Color3f(0.7f, .15f, .15f); 
    Color3f c2=new Color3f(0.7f, .15f, .15f); 
    Color3f[] c=(Color3f[]) new Color3f[20] ; 

     c[0] =new Color3f(Color.getHSBColor(20.f, 30f, 2.f)); 
     c[1] =new Color3f(Color.BLUE); 
     c[2] =new Color3f(Color.YELLOW); 
     c[3] =new Color3f(Color.GREEN); 
     c[4] =new Color3f(Color.WHITE); 
     c[5] =new Color3f(Color.CYAN); 
     c[6] =new Color3f(Color.LIGHT_GRAY); 
     c[7] =new Color3f(Color.PINK); 
     c[8] =new Color3f(Color.RED); 
     c[9] =new Color3f(Color.DARK_GRAY); 
     c[10] =new Color3f(Color.MAGENTA); 
     c[11] =new Color3f(Color.getHSBColor(0.2f, 0.15f, 2.f)); 
     c[11] =new Color3f(Color.getHSBColor(0.8f, 0.1f, 15.f)); 
     c[13] =new Color3f(Color.ORANGE); 
     c[11] =new Color3f(Color.getHSBColor(1.f, 0.8f, 2.f)); 

    for (int i=0; i<boxes.size(); i++) { 

      Transform3D transform = new Transform3D(); 
      transform.setTranslation(pp); 
      Box ProductBox = addProductBox(boxes.get(i).dimension.get("length"),boxes.get(i).dimension.get("breadth") 
        ,boxes.get(i).dimension.get("height"),c1, c2,c[i],c[i]); 

      Transform3D rotateCube = new Transform3D(); 
      rotateCube.set(new AxisAngle4d(1.0, 1.0, 0.0, Math.PI/4.0)); 
      TransformGroup rotationGroup = new TransformGroup(rotateCube); 
      TransformGroup TranslateGroup = new TransformGroup(transform); 
      TranslateGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); 
      rotationGroup.addChild(ProductBox); 
      TranslateGroup.addChild(rotationGroup); 
      nodeRoot.addChild(TranslateGroup); 
      Shape3D shape = ProductBox.getShape(Box.FRONT); 
      GeometryArray g=(GeometryArray)shape.getGeometry(); 
      position[0]-= boxes.get(i).dimension.get("length")+0.15f; 
      System.out.println(position[0]+" "+position[1]+" "+position[2]); 

      Vector3f pp2 = new Vector3f (position[0],position[1],position[2]); 
      pp=pp2; 
      c[i]=c[i+1]; 
    } 

мне удалось позиционировать все ящики в контейнере путем вычитания длины из положения [0] в каждой итерации. Но ящики не выстроились. Я приложил изображение, показывающее, что я сделал до сих пор: here

ответ

0

У меня есть эта простая программа. Скажем, у вас есть форма Shape3D:

GeometryArray ge=(GeometryArray)shape.getGeometry(); 
double[] cc1=new double[3]; 
ge.getCoordinate(0, cc1); 
System.out.println(cc1[0]+" "+cc1[1]+" "+cc1[2]); 
ge.getCoordinate(1, cc1); 
System.out.println(cc1[0]+" "+cc1[1]+" "+cc1[2]); 

Таким образом, я могу получить координаты формы. Вы должны быть хорошо расположены в 3D-пространстве, чтобы понять. Вы должны поэкспериментировать, разместив свой объект (сначала только один).

+0

Спасибо большое! Итак, это сработало для первой коробки, но когда я попытался позиционировать второй рядом с первым, это не так. –

+0

можете ли вы обновить код, чтобы узнать, что вы делаете? – gpasch

+0

Я отредактировал мой вопрос, я пытался использовать длину ящика, который я ставил каждый раз. Он работал, но ящики не на одной линии. –