public override List <KinematicSolution> Kinematics(IEnumerable <Target> targets, IEnumerable <double[]> prevJoints = null, bool displayMeshes = false) { var target = targets.First(); var prevJoint = prevJoints?.First(); var kinematics = new List <KinematicSolution>(); var kinematic = Robot.Kinematics(target, prevJoint, displayMeshes, this.BasePlane); var planes = kinematic.Planes.ToList(); var meshes = (displayMeshes) ? kinematic.Meshes.ToList() : null; // Tool if (target.Tool != null) { Plane toolPlane = target.Tool.Tcp; toolPlane.Transform(planes[planes.Count - 1].ToTransform()); planes.Add(toolPlane); } else { planes.Add(planes[planes.Count - 1]); } if (displayMeshes) { if (target.Tool?.Mesh != null) { Mesh toolMesh = target.Tool.Mesh.DuplicateMesh(); toolMesh.Transform(Transform.PlaneToPlane(target.Tool.Tcp, planes[planes.Count - 1])); meshes.Add(toolMesh); } else { meshes.Add(null); } kinematic.Meshes = meshes.ToArray(); } kinematic.Planes = planes.ToArray(); kinematics.Add(kinematic); return(kinematics); }