void Shape::add_vertices_to_array(PoolVector<Vector3> &array, const Transform &p_xform) { Vector<Vector3> toadd = _gen_debug_mesh_lines(); if (toadd.size()) { int base = array.size(); array.resize(base + toadd.size()); PoolVector<Vector3>::Write w = array.write(); for (int i = 0; i < toadd.size(); i++) { w[i + base] = p_xform.xform(toadd[i]); } } }
Ref<Mesh> Shape::get_debug_mesh() { if (debug_mesh_cache.is_valid()) return debug_mesh_cache; Vector<Vector3> lines = _gen_debug_mesh_lines(); debug_mesh_cache = Ref<Mesh>(memnew(Mesh)); if (!lines.empty()) { //make mesh DVector<Vector3> array; array.resize(lines.size()); { DVector<Vector3>::Write w=array.write(); for(int i=0;i<lines.size();i++) { w[i]=lines[i]; } } Array arr; arr.resize(Mesh::ARRAY_MAX); arr[Mesh::ARRAY_VERTEX]=array; SceneTree *st=OS::get_singleton()->get_main_loop()->cast_to<SceneTree>(); debug_mesh_cache->add_surface(Mesh::PRIMITIVE_LINES,arr); if (st) { debug_mesh_cache->surface_set_material(0,st->get_debug_collision_material()); } } return debug_mesh_cache; }