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; }
public RETriangle(Triangle3D triangle) : base(triangle, triangle.A, triangle.B - triangle.A, triangle.C - triangle.A) { }