public void Visit(Triangle3D triangle)
 {
     var globalTriangle = new Triangle3D {
         A = ToAbsolute(triangle.A),
         B = ToAbsolute(triangle.B),
         C = ToAbsolute(triangle.C),
         Material = triangle.Material
     };
     _decoratedShape = new RETriangle(globalTriangle);
 }
 private Shape3D ConvertShapeNode(ShapeNode node, float[,] transformation)
 {
     AppearanceNode appearance = (AppearanceNode)node.appearance.Node;
     MaterialNode material = appearance.material.Node as MaterialNode;
     if (node.geometry.Node is SphereNode) {
         SphereNode sphereNode = (SphereNode)node.geometry.Node;
         Sphere3D sphere = new Sphere3D();
         //sphere.Position = new Graph3D.Framework.Math.Vector3D(0, 0, 0);
         sphere.Radius = sphereNode.radius.Value;
         SetAppearance(sphere, appearance);
         return sphere;
     }
     if (node.geometry.Node is BoxNode) {
         return null;
     }
     if (node.geometry.Node is IndexedFaceSetNode) {
         IndexedFaceSetNode faceSetNode = (IndexedFaceSetNode)node.geometry.Node;
         Shape3DComposite composite = new Shape3DComposite();
         int facesCount = 0;
         for (int i = 0; i < faceSetNode.coordIndex.length; i++)
             if (faceSetNode.coordIndex[i] == -1) facesCount++;
         MFVec3f coords = ((CoordinateNode)faceSetNode.coord.Node).point;
         for (int faceOffsetIndex = 0; faceOffsetIndex < faceSetNode.coordIndex.length; faceOffsetIndex++) {
             Triangle3D triangle;
             triangle = new Triangle3D();
             SFVec3f a = coords[faceSetNode.coordIndex[faceOffsetIndex]];
             SFVec3f b = coords[faceSetNode.coordIndex[faceOffsetIndex + 1]];
             SFVec3f c = coords[faceSetNode.coordIndex[faceOffsetIndex + 2]];
             triangle.A = ConvertVector3D(a, transformation);
             triangle.B = ConvertVector3D(b, transformation);
             triangle.C = ConvertVector3D(c, transformation);
             SetAppearance(triangle, appearance);
             composite.Add(triangle);
             faceOffsetIndex += 3;
             while (faceSetNode.coordIndex[faceOffsetIndex] != -1) {
                 faceOffsetIndex++;
             }
         }
         triangles += facesCount;
         return composite;
     }
     return null;
 }
Example #3
0
 public RETriangle(Triangle3D triangle)
     : base(triangle, triangle.A, triangle.B - triangle.A, triangle.C - triangle.A) {
 }