Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_mesh_to_volume.cc
| Show First 20 Lines • Show All 127 Lines • ▼ Show 20 Lines | #ifdef WITH_OPENVDB | ||||
| Mesh *mesh = BKE_modifier_get_evaluated_mesh_from_evaluated_object(object_to_convert, false); | Mesh *mesh = BKE_modifier_get_evaluated_mesh_from_evaluated_object(object_to_convert, false); | ||||
| if (mesh == nullptr) { | if (mesh == nullptr) { | ||||
| return input_volume; | return input_volume; | ||||
| } | } | ||||
| BKE_mesh_wrapper_ensure_mdata(mesh); | BKE_mesh_wrapper_ensure_mdata(mesh); | ||||
| const float4x4 mesh_to_own_object_space_transform = float4x4(ctx->object->imat) * | const float4x4 mesh_to_own_object_space_transform = float4x4(ctx->object->imat) * | ||||
| float4x4(object_to_convert->obmat); | float4x4(object_to_convert->obmat); | ||||
| const BoundBox *bb = BKE_object_boundbox_get(mvmd->object); | |||||
| geometry::MeshToVolumeResolution resolution; | geometry::MeshToVolumeResolution resolution; | ||||
| resolution.mode = (MeshToVolumeModifierResolutionMode)mvmd->resolution_mode; | resolution.mode = (MeshToVolumeModifierResolutionMode)mvmd->resolution_mode; | ||||
| if (resolution.mode == MESH_TO_VOLUME_RESOLUTION_MODE_VOXEL_AMOUNT) { | if (resolution.mode == MESH_TO_VOLUME_RESOLUTION_MODE_VOXEL_AMOUNT) { | ||||
| resolution.settings.voxel_amount = mvmd->voxel_amount; | resolution.settings.voxel_amount = mvmd->voxel_amount; | ||||
| if (resolution.settings.voxel_amount <= 0.0f) { | if (resolution.settings.voxel_amount <= 0.0f) { | ||||
| return input_volume; | return input_volume; | ||||
| } | } | ||||
| } | } | ||||
| else if (resolution.mode == MESH_TO_VOLUME_RESOLUTION_MODE_VOXEL_SIZE) { | else if (resolution.mode == MESH_TO_VOLUME_RESOLUTION_MODE_VOXEL_SIZE) { | ||||
| resolution.settings.voxel_size = mvmd->voxel_size; | resolution.settings.voxel_size = mvmd->voxel_size; | ||||
| if (resolution.settings.voxel_size <= 0.0f) { | if (resolution.settings.voxel_size <= 0.0f) { | ||||
| return input_volume; | return input_volume; | ||||
| } | } | ||||
| } | } | ||||
| auto bounds_fn = [&](float3 &r_min, float3 &r_max) { | |||||
| const BoundBox *bb = BKE_object_boundbox_get(mvmd->object); | |||||
| r_min = bb->vec[0]; | |||||
| r_max = bb->vec[6]; | |||||
| }; | |||||
| const float voxel_size = geometry::volume_compute_voxel_size(ctx->depsgraph, | const float voxel_size = geometry::volume_compute_voxel_size(ctx->depsgraph, | ||||
| bb->vec[0], | bounds_fn, | ||||
| bb->vec[6], | |||||
| resolution, | resolution, | ||||
| mvmd->exterior_band_width, | mvmd->exterior_band_width, | ||||
| mesh_to_own_object_space_transform); | mesh_to_own_object_space_transform); | ||||
| /* Create a new volume. */ | /* Create a new volume. */ | ||||
| Volume *volume = BKE_volume_new_for_eval(input_volume); | Volume *volume = BKE_volume_new_for_eval(input_volume); | ||||
| /* Convert mesh to grid and add to volume. */ | /* Convert mesh to grid and add to volume. */ | ||||
| ▲ Show 20 Lines • Show All 62 Lines • Show Last 20 Lines | |||||