121 btAssert ( index >= 0 );
122 btAssert ( index < getIndexedMeshArray()[segment].m_numTriangles );
124 btAssert ( segment >= 0 );
125 btAssert ( segment < getIndexedMeshArray().size());
128 const btIndexedMesh &v_mesh = m_mesh->getIndexedMeshArray()[segment];
130 const int *t_index =
static_cast<int32_t *
> ((
void *) v_mesh.m_triangleIndexBase);
131 int p_index = 3 * index;
132 int vndx0 = t_index[p_index];
133 int vndx1 = t_index[p_index+1];
134 int vndx2 = t_index[p_index+2];
136 const btScalar *t_vertex =
static_cast<const btScalar *
> ((
void *) v_mesh.m_vertexBase);
138 btMatrix3x3 triangle(t_vertex[vndx0+0], t_vertex[vndx0+1], t_vertex[vndx0+2],
139 t_vertex[vndx1+0], t_vertex[vndx1+1], t_vertex[vndx1+2],
140 t_vertex[vndx2+0], t_vertex[vndx2+1], t_vertex[vndx2+2]);
181 SpiceDLADescr segment;
184 FileName dskFile(dskfile);
185 if ( !dskFile.fileExists() ) {
186 QString mess =
"NAIF DSK file [" + dskfile +
"] does not exist.";
187 throw IException(IException::User, mess, _FILEINFO_);
191 dasopr_c( dskFile.expanded().toLatin1().data(), &handle );
195 dlabfs_c( handle, &segment, &found );
198 QString mess =
"No segments found in DSK file " + dskfile ;
199 throw IException(IException::User, mess, _FILEINFO_);
202 #if defined(DSK_DEBUG)
203 std::cout <<
"Maximum Bullet Parts: " <<
bt_MaxBodyParts() << std::endl;
204 std::cout <<
"Maximum Triangles/Part: " <<
bt_MaxTriangles() << std::endl;
209 m_mesh.reset(
new btTriangleIndexVertexArray() );
220 dskz02_c( handle, &segment, &s_vertices, &s_plates);
223#if defined(DSK_DEBUG)
224 std::cout <<
"\nSegment: " << n_segments << std::endl;
225 std::cout <<
"#Vertices: " << s_vertices << std::endl;
226 std::cout <<
"#Plates: " << s_plates << std::endl;
230 DskSegmentBuffer dsk_buffer(n_segments, segment, s_plates, s_vertices );
233 (void) dskv02_c(handle, &segment, 1, s_vertices, &n,
234 ( SpiceDouble(*)[3] ) ( dsk_buffer.vector_ptr(0)));
238 (void) dskp02_c(handle, &segment, 1, s_plates, &n,
239 ( SpiceInt(*)[3] ) (dsk_buffer.index_ptr(0)));
243 dsk_buffer.add_index_offset( -1 );
244 m_buffers.push_back( dsk_buffer );
245 n_parts += dsk_buffer.addtomesh( *m_mesh );
249 dlafns_c(handle, &dsk_buffer.dla(), &segment, &found);
253#if defined(DSK_DEBUG)
254 std::cout <<
"\n#Segments: " << m_buffers.size() << std::endl;
255 std::cout <<
"#Parts: " << n_parts << std::endl;
262 bool useQuantizedAabbCompression =
true;
264 std::cout <<
"*** WARNING *** BulletDskShape total mesh parts (" << n_parts
265 <<
") exceeds Bullet max (" <<
bt_MaxBodyParts() <<
") - quantized AABB compression disabled"
269 useQuantizedAabbCompression =
false;
273 btBvhTriangleMeshShape *v_triShape =
new btBvhTriangleMeshShape(m_mesh.get(),
274 useQuantizedAabbCompression);
275 v_triShape->setUserPointer(
this);
276 btCollisionObject *vbody =
new btCollisionObject();
277 vbody->setCollisionShape(v_triShape);