| 734 | } |
| 735 | |
| 736 | void GuiShapeEdPreview::refreshShape() |
| 737 | { |
| 738 | if ( mModel ) |
| 739 | { |
| 740 | // Nodes or details may have changed => refresh the shape instance |
| 741 | mModel->setMaterialList( mModel->mMaterialList ); |
| 742 | mModel->initNodeTransforms(); |
| 743 | mModel->initMeshObjects(); |
| 744 | |
| 745 | TSShape* shape = mModel->getShape(); |
| 746 | |
| 747 | mProjectedNodes.setSize( shape->nodes.size() ); |
| 748 | |
| 749 | if ( mSelectedObject >= shape->objects.size() ) |
| 750 | { |
| 751 | mSelectedObject = -1; |
| 752 | mSelectedObjDetail = 0; |
| 753 | } |
| 754 | |
| 755 | // Re-compute the collision mesh stats |
| 756 | mColMeshes = 0; |
| 757 | mColPolys = 0; |
| 758 | for ( S32 i = 0; i < shape->details.size(); i++ ) |
| 759 | { |
| 760 | const TSShape::Detail& det = shape->details[i]; |
| 761 | const String& detName = shape->getName( det.nameIndex ); |
| 762 | if ( ( det.subShapeNum < 0 ) || !detName.startsWith( "collision-" ) ) |
| 763 | continue; |
| 764 | |
| 765 | mColPolys += det.polyCount; |
| 766 | |
| 767 | S32 od = det.objectDetailNum; |
| 768 | S32 start = shape->subShapeFirstObject[det.subShapeNum]; |
| 769 | S32 end = start + shape->subShapeNumObjects[det.subShapeNum]; |
| 770 | for ( S32 j = start; j < end; j++ ) |
| 771 | { |
| 772 | const TSShape::Object &obj = shape->objects[j]; |
| 773 | const TSMesh* mesh = ( od < obj.numMeshes ) ? shape->meshes[obj.startMeshIndex + od] : NULL; |
| 774 | if ( mesh ) |
| 775 | mColMeshes++; |
| 776 | } |
| 777 | } |
| 778 | } |
| 779 | } |
| 780 | |
| 781 | void GuiShapeEdPreview::updateSun() |
| 782 | { |
no test coverage detected