| 676 | } |
| 677 | |
| 678 | void GuiShapeEdPreview::refreshShape() |
| 679 | { |
| 680 | if ( mModel ) |
| 681 | { |
| 682 | // Nodes or details may have changed => refresh the shape instance |
| 683 | mModel->setMaterialList( mModel->mMaterialList ); |
| 684 | mModel->initNodeTransforms(); |
| 685 | mModel->initMeshObjects(); |
| 686 | |
| 687 | TSShape* shape = mModel->getShape(); |
| 688 | |
| 689 | mProjectedNodes.setSize( shape->nodes.size() ); |
| 690 | |
| 691 | if ( mSelectedObject >= shape->objects.size() ) |
| 692 | { |
| 693 | mSelectedObject = -1; |
| 694 | mSelectedObjDetail = 0; |
| 695 | } |
| 696 | |
| 697 | // Re-compute the collision mesh stats |
| 698 | mColMeshes = 0; |
| 699 | mColPolys = 0; |
| 700 | for ( S32 i = 0; i < shape->details.size(); i++ ) |
| 701 | { |
| 702 | const TSShape::Detail& det = shape->details[i]; |
| 703 | const String& detName = shape->getName( det.nameIndex ); |
| 704 | if ( ( det.subShapeNum < 0 ) || !detName.startsWith( "collision-" ) ) |
| 705 | continue; |
| 706 | |
| 707 | mColPolys += det.polyCount; |
| 708 | |
| 709 | S32 od = det.objectDetailNum; |
| 710 | S32 start = shape->subShapeFirstObject[det.subShapeNum]; |
| 711 | S32 end = start + shape->subShapeNumObjects[det.subShapeNum]; |
| 712 | for ( S32 j = start; j < end; j++ ) |
| 713 | { |
| 714 | const TSShape::Object &obj = shape->objects[j]; |
| 715 | const TSMesh* mesh = ( od < obj.numMeshes ) ? shape->meshes[obj.startMeshIndex + od] : NULL; |
| 716 | if ( mesh ) |
| 717 | mColMeshes++; |
| 718 | } |
| 719 | } |
| 720 | } |
| 721 | } |
| 722 | |
| 723 | void GuiShapeEdPreview::updateSun() |
| 724 | { |
no test coverage detected