Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_volume_to_mesh.cc
| Show First 20 Lines • Show All 151 Lines • ▼ Show 20 Lines | if (volume_grid == nullptr) { | ||||
| BKE_modifier_set_error(ctx->object, md, "Cannot find '%s' grid", vmmd->grid_name); | BKE_modifier_set_error(ctx->object, md, "Cannot find '%s' grid", vmmd->grid_name); | ||||
| return create_empty_mesh(input_mesh); | return create_empty_mesh(input_mesh); | ||||
| } | } | ||||
| const openvdb::GridBase::ConstPtr local_grid = BKE_volume_grid_openvdb_for_read(volume, | const openvdb::GridBase::ConstPtr local_grid = BKE_volume_grid_openvdb_for_read(volume, | ||||
| volume_grid); | volume_grid); | ||||
| openvdb::math::Transform::Ptr transform = local_grid->transform().copy(); | openvdb::math::Transform::Ptr transform = local_grid->transform().copy(); | ||||
| transform->postMult(openvdb::Mat4d((float *)vmmd->object->obmat)); | transform->postMult(openvdb::Mat4d((float *)vmmd->object->object_to_world)); | ||||
| openvdb::Mat4d imat = openvdb::Mat4d((float *)ctx->object->imat); | openvdb::Mat4d imat = openvdb::Mat4d((float *)ctx->object->imat); | ||||
| /* `imat` had floating point issues and wasn't affine. */ | /* `imat` had floating point issues and wasn't affine. */ | ||||
| imat.setCol(3, openvdb::Vec4d(0, 0, 0, 1)); | imat.setCol(3, openvdb::Vec4d(0, 0, 0, 1)); | ||||
| transform->postMult(imat); | transform->postMult(imat); | ||||
| /* Create a temporary transformed grid. The underlying tree is shared. */ | /* Create a temporary transformed grid. The underlying tree is shared. */ | ||||
| openvdb::GridBase::ConstPtr transformed_grid = local_grid->copyGridReplacingTransform(transform); | openvdb::GridBase::ConstPtr transformed_grid = local_grid->copyGridReplacingTransform(transform); | ||||
| ▲ Show 20 Lines • Show All 60 Lines • Show Last 20 Lines | |||||