48 char * container_name,
58 Object * obj = inode->EvalWorldState(curtime).obj;
59 TriObject * tri = (TriObject *)obj->ConvertToType(curtime, triObjectClassID);
60 Mesh mesh = tri->mesh;
61 DWORD wirecolor = inode->GetWireColor();
63 if (mesh.getNumVerts() == 0) {
64 throw ErrorClass(
"Mesh %s has no vertices!\n",mesh_name);
70 memset(&BoxData,0,
sizeof(BoxData));
73 if ((container_name !=
NULL) && (strlen(container_name) > 0)) {
74 strcpy(BoxData.Name,container_name);
75 strcat(BoxData.Name,
".");
77 strcat(BoxData.Name,mesh_name);
79 BoxData.Attributes = 0;
101 BoxData.Color.R = GetRValue(wirecolor);
102 BoxData.Color.G = GetGValue(wirecolor);
103 BoxData.Color.B = GetBValue(wirecolor);
111 Matrix3 node_matrix = inode->GetObjectTM(curtime);
115 for (ivert = 0; ivert < mesh.getNumVerts (); ++ivert) {
116 mesh.verts[ivert] = mesh.verts[ivert] * offset_matrix;
120 Point3 min_point = mesh.verts[0];
121 Point3 max_point = mesh.verts[1];
123 for (ivert=0; ivert < mesh.getNumVerts(); ++ivert) {
124 if (mesh.verts[ivert].x < min_point.x) min_point.x = mesh.verts[ivert].x;
125 if (mesh.verts[ivert].y < min_point.y) min_point.y = mesh.verts[ivert].y;
126 if (mesh.verts[ivert].z < min_point.z) min_point.z = mesh.verts[ivert].z;
128 if (mesh.verts[ivert].x > max_point.x) max_point.x = mesh.verts[ivert].x;
129 if (mesh.verts[ivert].y > max_point.y) max_point.y = mesh.verts[ivert].y;
130 if (mesh.verts[ivert].z > max_point.z) max_point.z = mesh.verts[ivert].z;
133 Point3 center = (max_point + min_point) / 2.0f;
134 Point3 extent = (max_point - min_point) / 2.0f;
136 BoxData.Center.X = center.x;
137 BoxData.Center.Y = center.y;
138 BoxData.Center.Z = center.z;
140 BoxData.Extent.X = extent.x;
141 BoxData.Extent.Y = extent.y;
142 BoxData.Extent.Z = extent.z;