Java3d 形状与 Antlr

发布于 2024-10-09 06:16:19 字数 898 浏览 5 评论 0原文

那么如何评估一个非常简单的 antlr 语法,它只能做到这一点。

Box(1,2,4)
Cylinder(1,2) 

并构建 java3d 形状,(假设我已经为 java3d 构建了画布,并且拥有在 java 中创建每个元素的代码,

protected static BranchGroup addBox1(Float a, Float b, Float C){
    // create branch for display
    TransformGroup bodyTransform = new TransformGroup();
    BranchGroup bg = new BranchGroup();
    bg.setCapability(BranchGroup.ALLOW_DETACH);
    bg.setUserData(shapeId);
    // set transformation
    bodyTransform =  setTransformShape(0,0,0,0,0,0,0);
    // create box  
    Box tmpBox = new Box(a,b,c, Primitive.GENERATE_NORMALS |
                  Primitive.GENERATE_TEXTURE_COORDS,setAppearance(color));    
    getCoords(tmpBox);

    bodyTransform.addChild(tmpBox);
    trFormList.add(bodyTransform);
    shapeId++;
    //add box to branch
    bg.addChild(bodyTransform);
    return bg;   
   }
)

谢谢

Well how to evaluate a very simple antlr grammar that does only this.

Box(1,2,4)
Cylinder(1,2) 

and builds java3d shapes, (given I have already built a canvas for java3d and have the code for creating each element in java,

protected static BranchGroup addBox1(Float a, Float b, Float C){
    // create branch for display
    TransformGroup bodyTransform = new TransformGroup();
    BranchGroup bg = new BranchGroup();
    bg.setCapability(BranchGroup.ALLOW_DETACH);
    bg.setUserData(shapeId);
    // set transformation
    bodyTransform =  setTransformShape(0,0,0,0,0,0,0);
    // create box  
    Box tmpBox = new Box(a,b,c, Primitive.GENERATE_NORMALS |
                  Primitive.GENERATE_TEXTURE_COORDS,setAppearance(color));    
    getCoords(tmpBox);

    bodyTransform.addChild(tmpBox);
    trFormList.add(bodyTransform);
    shapeId++;
    //add box to branch
    bg.addChild(bodyTransform);
    return bg;   
   }
)

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

感情废物 2024-10-16 06:16:19

也许是这样的?

// ...

parse
  :  shape+ EOF
  ;

shape
  :  BOX '(' a=INT ',' b=INT ',' c=INT ')' { 
       YourClass.addBox(Float.parseFloat($a.text), Float.parseFloat($b.text), Float.parseFloat($c.text)); 
     }
  |  CYL '(' a=INT ',' b=INT ')' { 
       YourClass.addCylinder(Float.parseFloat($a.text), Float.parseFloat($b.text)); 
     }
  ;

BOX : 'Box';
CYL : 'Cylinder';
INT : '0'..'9'+;
SPACE : (' ' | '\t' | '\r' | '\n'){skip();};

// ...

Something like this perhaps?

// ...

parse
  :  shape+ EOF
  ;

shape
  :  BOX '(' a=INT ',' b=INT ',' c=INT ')' { 
       YourClass.addBox(Float.parseFloat($a.text), Float.parseFloat($b.text), Float.parseFloat($c.text)); 
     }
  |  CYL '(' a=INT ',' b=INT ')' { 
       YourClass.addCylinder(Float.parseFloat($a.text), Float.parseFloat($b.text)); 
     }
  ;

BOX : 'Box';
CYL : 'Cylinder';
INT : '0'..'9'+;
SPACE : (' ' | '\t' | '\r' | '\n'){skip();};

// ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文