| 1789 | } |
| 1790 | |
| 1791 | Ref<SceneGraph::Node> SceneGraph::remove_mblur(Ref<SceneGraph::Node> node, bool mblur) |
| 1792 | { |
| 1793 | if (Ref<SceneGraph::TransformNode> xfmNode = node.dynamicCast<SceneGraph::TransformNode>()) { |
| 1794 | if (mblur) { |
| 1795 | if (xfmNode->spaces.size() > 1) |
| 1796 | return nullptr; |
| 1797 | } else { |
| 1798 | if (xfmNode->spaces.size() > 1) |
| 1799 | return node; |
| 1800 | } |
| 1801 | xfmNode->child = remove_mblur(xfmNode->child, mblur); |
| 1802 | } |
| 1803 | else if (Ref<SceneGraph::MultiTransformNode> xfmNode = node.dynamicCast<SceneGraph::MultiTransformNode>()) { |
| 1804 | if (mblur) { |
| 1805 | if (xfmNode->spaces.size() == 0 || xfmNode->spaces[0].size() > 1) |
| 1806 | return nullptr; |
| 1807 | } else { |
| 1808 | if (xfmNode->spaces.size() > 0 && xfmNode->spaces[0].size() > 1) |
| 1809 | return node; |
| 1810 | } |
| 1811 | xfmNode->child = remove_mblur(xfmNode->child, mblur); |
| 1812 | } |
| 1813 | else if (Ref<SceneGraph::GroupNode> groupNode = node.dynamicCast<SceneGraph::GroupNode>()) |
| 1814 | { |
| 1815 | for (size_t i=0; i<groupNode->children.size(); i++) |
| 1816 | groupNode->children[i] = remove_mblur(groupNode->children[i], mblur); |
| 1817 | } |
| 1818 | else if (Ref<SceneGraph::TriangleMeshNode> mesh = node.dynamicCast<SceneGraph::TriangleMeshNode>()) |
| 1819 | { |
| 1820 | if ((mesh->numTimeSteps() > 1) == mblur) |
| 1821 | return nullptr; |
| 1822 | } |
| 1823 | else if (Ref<SceneGraph::QuadMeshNode> mesh = node.dynamicCast<SceneGraph::QuadMeshNode>()) |
| 1824 | { |
| 1825 | if ((mesh->numTimeSteps() > 1) == mblur) |
| 1826 | return nullptr; |
| 1827 | } |
| 1828 | else if (Ref<SceneGraph::SubdivMeshNode> mesh = node.dynamicCast<SceneGraph::SubdivMeshNode>()) |
| 1829 | { |
| 1830 | if ((mesh->numTimeSteps() > 1) == mblur) |
| 1831 | return nullptr; |
| 1832 | } |
| 1833 | else if (Ref<SceneGraph::HairSetNode> mesh = node.dynamicCast<SceneGraph::HairSetNode>()) |
| 1834 | { |
| 1835 | if ((mesh->numTimeSteps() > 1) == mblur) |
| 1836 | return nullptr; |
| 1837 | } |
| 1838 | else if (Ref<SceneGraph::PointSetNode> mesh = node.dynamicCast<SceneGraph::PointSetNode>()) |
| 1839 | { |
| 1840 | if ((mesh->numTimeSteps() > 1) == mblur) |
| 1841 | return nullptr; |
| 1842 | } |
| 1843 | return node; |
| 1844 | } |
| 1845 | |
| 1846 | void SceneGraph::convert_mblur_to_nonmblur(Ref<Node> node) |
| 1847 | { |
no test coverage detected