MCPcopy Create free account
hub / github.com/RenderKit/embree / resize_randomly

Method resize_randomly

tutorials/common/scenegraph/scenegraph.cpp:1147–1194  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1145 }
1146
1147 void SceneGraph::resize_randomly(RandomSampler& sampler, Ref<Node> node, const size_t N)
1148 {
1149 if (Ref<SceneGraph::TransformNode> xfmNode = node.dynamicCast<SceneGraph::TransformNode>()) {
1150 resize_randomly(sampler,xfmNode->child, N);
1151 }
1152 else if (Ref<SceneGraph::GroupNode> groupNode = node.dynamicCast<SceneGraph::GroupNode>())
1153 {
1154 for (size_t i=0; i<groupNode->children.size(); i++)
1155 resize_randomly(sampler,groupNode->children[i],N);
1156 }
1157 else if (Ref<SceneGraph::TriangleMeshNode> mesh = node.dynamicCast<SceneGraph::TriangleMeshNode>())
1158 {
1159 if (!mesh->triangles.size()) return;
1160 for (size_t i=0; i<N; i++) {
1161 size_t j = RandomSampler_getInt(sampler)%(min(mesh->triangles.size(),N));
1162 if (i < mesh->triangles.size()) std::swap(mesh->triangles[i],mesh->triangles[j]);
1163 else mesh->triangles.push_back(mesh->triangles[j]);
1164 }
1165 }
1166 else if (Ref<SceneGraph::QuadMeshNode> mesh = node.dynamicCast<SceneGraph::QuadMeshNode>())
1167 {
1168 if (!mesh->quads.size()) return;
1169 for (size_t i=0; i<N; i++) {
1170 size_t j = RandomSampler_getInt(sampler)%(min(mesh->quads.size(),N));
1171 if (i < mesh->quads.size()) std::swap(mesh->quads[i],mesh->quads[j]);
1172 else mesh->quads.push_back(mesh->quads[j]);
1173 }
1174 }
1175 else if (Ref<SceneGraph::HairSetNode> mesh = node.dynamicCast<SceneGraph::HairSetNode>())
1176 {
1177 if (!mesh->hairs.size()) return;
1178 for (size_t i=0; i<N; i++) {
1179 size_t j = RandomSampler_getInt(sampler)%(min(mesh->hairs.size(),N));
1180 if (i < mesh->hairs.size()) std::swap(mesh->hairs[i],mesh->hairs[j]);
1181 else mesh->hairs.push_back(mesh->hairs[j]);
1182 }
1183 }
1184 else if (Ref<SceneGraph::PointSetNode> mesh = node.dynamicCast<SceneGraph::PointSetNode>())
1185 {
1186 if (mesh->positions.size() <= N) return;
1187 mesh->positions.resize(N);
1188 }
1189 else if (Ref<SceneGraph::SubdivMeshNode> mesh = node.dynamicCast<SceneGraph::SubdivMeshNode>())
1190 {
1191 if (mesh->verticesPerFace.size() <= N) return;
1192 mesh->verticesPerFace.resize(N);
1193 }
1194 }
1195
1196 void SceneGraph::set_time_range(Ref<SceneGraph::Node> node, const BBox1f& time_range)
1197 {

Callers

nothing calls this directly

Calls 6

RandomSampler_getIntFunction · 0.85
minFunction · 0.50
swapFunction · 0.50
sizeMethod · 0.45
push_backMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected