Blender V4.3
sculpt_boundary.cc File Reference
#include "sculpt_boundary.hh"
#include "BLI_array_utils.hh"
#include "BLI_enumerable_thread_specific.hh"
#include "BLI_math_rotation_legacy.hh"
#include "BLI_math_vector.hh"
#include "BLI_task.h"
#include "DNA_brush_types.h"
#include "DNA_mesh_types.h"
#include "DNA_object_types.h"
#include "BKE_brush.hh"
#include "BKE_ccg.hh"
#include "BKE_colortools.hh"
#include "BKE_paint.hh"
#include "BKE_pbvh_api.hh"
#include "brushes/types.hh"
#include "mesh_brush_common.hh"
#include "paint_intern.hh"
#include "sculpt_automask.hh"
#include "sculpt_cloth.hh"
#include "sculpt_flood_fill.hh"
#include "sculpt_intern.hh"
#include "GPU_immediate.hh"
#include "GPU_state.hh"
#include <cstdlib>

Go to the source code of this file.

Classes

struct  blender::ed::sculpt_paint::boundary::LocalDataMesh
 
struct  blender::ed::sculpt_paint::boundary::LocalDataGrids
 
struct  blender::ed::sculpt_paint::boundary::LocalDataBMesh
 

Namespaces

namespace  blender
 
namespace  blender::ed
 
namespace  blender::ed::sculpt_paint
 
namespace  blender::ed::sculpt_paint::boundary
 

Functions

static bool blender::ed::sculpt_paint::boundary::check_counts (const int neighbor_count, const int boundary_vertex_count)
 
static bool blender::ed::sculpt_paint::boundary::is_vert_in_editable_boundary_mesh (const OffsetIndices< int > faces, const Span< int > corner_verts, const GroupedSpan< int > vert_to_face, const Span< bool > hide_vert, const Span< bool > hide_poly, const BitSpan boundary, const int initial_vert)
 
static bool blender::ed::sculpt_paint::boundary::is_vert_in_editable_boundary_grids (const OffsetIndices< int > faces, const Span< int > corner_verts, const SubdivCCG &subdiv_ccg, const BitSpan boundary, const SubdivCCGCoord initial_vert)
 
static bool blender::ed::sculpt_paint::boundary::is_vert_in_editable_boundary_bmesh (BMVert &initial_vert)
 
Nearest Boundary Vert
static std::optional< intblender::ed::sculpt_paint::boundary::get_closest_boundary_vert_mesh (Object &object, const GroupedSpan< int > vert_to_face, const Span< float3 > vert_positions, const Span< bool > hide_vert, const Span< bool > hide_poly, const BitSpan boundary, const int initial_vert, const float radius)
 
static std::optional< SubdivCCGCoordblender::ed::sculpt_paint::boundary::get_closest_boundary_vert_grids (Object &object, const OffsetIndices< int > faces, const Span< int > corner_verts, const SubdivCCG &subdiv_ccg, const BitSpan boundary, const SubdivCCGCoord initial_vert, const float radius)
 
static std::optional< BMVert * > blender::ed::sculpt_paint::boundary::get_closest_boundary_vert_bmesh (Object &object, BMesh *bm, BMVert &initial_vert, const float radius)
 
Specialized Initialization

Methods for initializing specialized data inside SculptBoundary

static void blender::ed::sculpt_paint::boundary::bend_data_init_mesh (const Span< float3 > vert_positions, const Span< float3 > vert_normals, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::bend_data_init_grids (const SubdivCCG &subdiv_ccg, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::bend_data_init_bmesh (BMesh *bm, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::slide_data_init_mesh (const Span< float3 > vert_positions, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::slide_data_init_grids (const SubdivCCG &subdiv_ccg, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::slide_data_init_bmesh (BMesh *bm, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::populate_twist_data (const Span< float3 > positions, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::twist_data_init_mesh (const Span< float3 > vert_positions, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::twist_data_init_grids (const SubdivCCG &subdiv_ccg, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::twist_data_init_bmesh (BMesh *bm, SculptBoundary &boundary)
 
Common helpers
static BLI_NOINLINE void blender::ed::sculpt_paint::boundary::filter_uninitialized_verts (const Span< int > propagation_steps, const MutableSpan< float > factors)
 
Bend Deformation
static BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_bend_position (const Span< float3 > positions, const Span< float3 > pivot_positions, const Span< float3 > pivot_axes, const Span< float > factors, const MutableSpan< float3 > new_positions)
 
static void blender::ed::sculpt_paint::boundary::calc_bend_mesh (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const Span< float3 > vert_pivot_positions, const Span< float3 > vert_pivot_axes, const bke::pbvh::MeshNode &node, LocalDataMesh &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target, const PositionDeformData &position_data)
 
static void blender::ed::sculpt_paint::boundary::calc_bend_grids (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, SubdivCCG &subdiv_ccg, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const Span< float3 > vert_pivot_positions, const Span< float3 > vert_pivot_axes, const bke::pbvh::GridsNode &node, LocalDataGrids &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::calc_bend_bmesh (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const Span< float3 > vert_pivot_positions, const Span< float3 > vert_pivot_axes, bke::pbvh::BMeshNode &node, LocalDataBMesh &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::do_bend_brush (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask, const SculptBoundary &boundary, const float strength, const eBrushDeformTarget deform_target)
 
Slide Deformation
static BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_slide_position (const Span< float3 > positions, const Span< float3 > directions, const Span< float > factors, const MutableSpan< float3 > new_positions)
 
static void blender::ed::sculpt_paint::boundary::calc_slide_mesh (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const Span< float3 > vert_slide_directions, const bke::pbvh::MeshNode &node, LocalDataMesh &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target, const PositionDeformData &position_data)
 
static void blender::ed::sculpt_paint::boundary::calc_slide_grids (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, SubdivCCG &subdiv_ccg, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const Span< float3 > vert_slide_directions, const bke::pbvh::GridsNode &node, LocalDataGrids &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::calc_slide_bmesh (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const Span< float3 > vert_slide_directions, bke::pbvh::BMeshNode &node, LocalDataBMesh &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::do_slide_brush (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask, const SculptBoundary &boundary, const float strength, const eBrushDeformTarget deform_target)
 
Inflate Deformation
static BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_inflate_position (const Span< float3 > positions, const Span< float3 > normals, const Span< float > factors, const MutableSpan< float3 > new_positions)
 
static void blender::ed::sculpt_paint::boundary::calc_inflate_mesh (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const bke::pbvh::MeshNode &node, LocalDataMesh &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target, const PositionDeformData &position_data)
 
static void blender::ed::sculpt_paint::boundary::calc_inflate_grids (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, SubdivCCG &subdiv_ccg, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const bke::pbvh::GridsNode &node, LocalDataGrids &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::calc_inflate_bmesh (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, bke::pbvh::BMeshNode &node, LocalDataBMesh &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::do_inflate_brush (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask, const SculptBoundary &boundary, const float strength, const eBrushDeformTarget deform_target)
 
Grab Deformation
static BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_grab_position (const Span< float3 > positions, const float3 grab_delta, const Span< float > factors, const MutableSpan< float3 > new_positions)
 
static void blender::ed::sculpt_paint::boundary::calc_grab_mesh (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const bke::pbvh::MeshNode &node, LocalDataMesh &tls, const float3 grab_delta_symmetry, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target, const PositionDeformData &position_data)
 
static void blender::ed::sculpt_paint::boundary::calc_grab_grids (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, SubdivCCG &subdiv_ccg, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const bke::pbvh::GridsNode &node, LocalDataGrids &tls, const float3 grab_delta_symmetry, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::calc_grab_bmesh (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, bke::pbvh::BMeshNode &node, LocalDataBMesh &tls, const float3 grab_delta_symmetry, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::do_grab_brush (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask, const SculptBoundary &boundary, const float strength, const eBrushDeformTarget deform_target)
 
Twist Deformation
static BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_twist_position (const Span< float3 > positions, const float3 pivot_point, const float3 pivot_axis, const Span< float > factors, const MutableSpan< float3 > new_positions)
 
static void blender::ed::sculpt_paint::boundary::calc_twist_mesh (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const bke::pbvh::MeshNode &node, LocalDataMesh &tls, const float3 twist_pivot_position, const float3 twist_axis, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target, const PositionDeformData &position_data)
 
static void blender::ed::sculpt_paint::boundary::calc_twist_grids (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, SubdivCCG &subdiv_ccg, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const float3 twist_pivot_position, const float3 twist_axis, const bke::pbvh::GridsNode &node, LocalDataGrids &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::calc_twist_bmesh (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const float3 twist_pivot_position, const float3 twist_axis, bke::pbvh::BMeshNode &node, LocalDataBMesh &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::do_twist_brush (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask, const SculptBoundary &boundary, const float strength, const eBrushDeformTarget deform_target)
 
Smooth Deformation
static BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_smooth_position (const Span< float3 > positions, const Span< float3 > average_position, const Span< float > factors, const MutableSpan< float3 > new_positions)
 
static BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_average_position (const Span< float3 > vert_positions, const Span< int > vert_propagation_steps, const Span< Vector< int > > neighbors, const Span< int > propagation_steps, const MutableSpan< float > factors, const MutableSpan< float3 > average_positions)
 
static BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_average_position (const SubdivCCG &subdiv_ccg, const Span< int > vert_propagation_steps, const Span< Vector< SubdivCCGCoord > > neighbors, const Span< int > propagation_steps, const MutableSpan< float > factors, const MutableSpan< float3 > average_positions)
 
static BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_average_position (const Span< int > vert_propagation_steps, const Span< Vector< BMVert * > > neighbors, const Span< int > propagation_steps, const MutableSpan< float > factors, const MutableSpan< float3 > average_positions)
 
static void blender::ed::sculpt_paint::boundary::calc_smooth_mesh (const Sculpt &sd, Object &object, const OffsetIndices< int > faces, const Span< int > corner_verts, const GroupedSpan< int > vert_to_face, const Span< bool > hide_poly, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const bke::pbvh::MeshNode &node, LocalDataMesh &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target, const PositionDeformData &position_data)
 
static void blender::ed::sculpt_paint::boundary::calc_smooth_grids (const Sculpt &sd, Object &object, SubdivCCG &subdiv_ccg, const Span< int > vert_propagation_steps, const Span< float > vert_factors, const bke::pbvh::GridsNode &node, LocalDataGrids &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::calc_smooth_bmesh (const Sculpt &sd, Object &object, const Span< int > vert_propagation_steps, const Span< float > vert_factors, bke::pbvh::BMeshNode &node, LocalDataBMesh &tls, const float3 symmetry_pivot, const float strength, const eBrushDeformTarget deform_target)
 
static void blender::ed::sculpt_paint::boundary::do_smooth_brush (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask, const SculptBoundary &boundary, const float strength, const eBrushDeformTarget deform_target)
 
Brush Initialization
static float blender::ed::sculpt_paint::boundary::displacement_from_grab_delta_get (const SculptSession &ss, const SculptBoundary &boundary)
 
static std::pair< float, floatblender::ed::sculpt_paint::boundary::calc_boundary_falloff (const SculptBoundary &boundary, const Brush &brush, const float radius, const int index)
 
static void blender::ed::sculpt_paint::boundary::init_falloff_mesh (const Span< float > mask, const Brush &brush, const float radius, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::init_falloff_grids (const SubdivCCG &subdiv_ccg, const Brush &brush, const float radius, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::init_falloff_bmesh (BMesh *bm, const Brush &brush, const float radius, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::init_boundary_mesh (const Depsgraph &depsgraph, Object &object, const Brush &brush, const ePaintSymmetryFlags symm_area)
 
static void blender::ed::sculpt_paint::boundary::init_boundary_grids (Object &object, const Brush &brush, const ePaintSymmetryFlags symm_area)
 
static void blender::ed::sculpt_paint::boundary::init_boundary_bmesh (Object &object, const Brush &brush, const ePaintSymmetryFlags symm_area)
 
static float blender::ed::sculpt_paint::boundary::get_mesh_strength (const SculptSession &ss, const Brush &brush)
 
void blender::ed::sculpt_paint::boundary::do_boundary_brush (const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask)
 
Public API
std::unique_ptr< SculptBoundaryblender::ed::sculpt_paint::boundary::data_init (const Depsgraph &depsgraph, Object &object, const Brush *brush, const int initial_vert, const float radius)
 
std::unique_ptr< SculptBoundaryblender::ed::sculpt_paint::boundary::data_init_mesh (const Depsgraph &depsgraph, Object &object, const Brush *brush, const int initial_vert, const float radius)
 
std::unique_ptr< SculptBoundaryblender::ed::sculpt_paint::boundary::data_init_grids (Object &object, const Brush *brush, const SubdivCCGCoord initial_vert, const float radius)
 
std::unique_ptr< SculptBoundaryblender::ed::sculpt_paint::boundary::data_init_bmesh (Object &object, const Brush *brush, BMVert *initial_vert, const float radius)
 
Boundary Drawing

Helper methods to draw boundary information.

std::unique_ptr< SculptBoundaryPreviewblender::ed::sculpt_paint::boundary::preview_data_init (const Depsgraph &depsgraph, Object &object, const Brush *brush, const float radius)
 
void blender::ed::sculpt_paint::boundary::edges_preview_draw (const uint gpuattr, SculptSession &ss, const float outline_col[3], const float outline_alpha)
 
void blender::ed::sculpt_paint::boundary::pivot_line_preview_draw (const uint gpuattr, SculptSession &ss)
 

Edit Data Calculation

#define BOUNDARY_VERTEX_NONE   -1
 
#define BOUNDARY_STEPS_NONE   -1
 
static void blender::ed::sculpt_paint::boundary::edit_data_init_mesh (OffsetIndices< int > faces, Span< int > corner_verts, GroupedSpan< int > vert_to_face, Span< float3 > vert_positions, Span< bool > hide_vert, Span< bool > hide_poly, const int initial_vert_i, const float radius, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::edit_data_init_grids (const SubdivCCG &subdiv_ccg, const int initial_vert_i, const float radius, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::edit_data_init_bmesh (BMesh *bm, const int initial_vert_i, const float radius, SculptBoundary &boundary)
 

Boundary Index Calculation

constexpr int blender::ed::sculpt_paint::boundary::BOUNDARY_INDICES_BLOCK_SIZE = 300
 
static void blender::ed::sculpt_paint::boundary::add_index (SculptBoundary &boundary, const int new_index, const float distance, Set< int, BOUNDARY_INDICES_BLOCK_SIZE > &included_verts)
 
static void blender::ed::sculpt_paint::boundary::indices_init_mesh (Object &object, const OffsetIndices< int > faces, const Span< int > corner_verts, const GroupedSpan< int > vert_to_face, const Span< bool > hide_vert, const Span< bool > hide_poly, const BitSpan boundary_verts, const Span< float3 > vert_positions, const int initial_boundary_vert, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::indices_init_grids (Object &object, const OffsetIndices< int > faces, const Span< int > corner_verts, const SubdivCCG &subdiv_ccg, const BitSpan boundary_verts, const SubdivCCGCoord initial_vert, SculptBoundary &boundary)
 
static void blender::ed::sculpt_paint::boundary::indices_init_bmesh (Object &object, BMesh *bm, BMVert &initial_boundary_vert, SculptBoundary &boundary)
 

Macro Definition Documentation

◆ BOUNDARY_STEPS_NONE

◆ BOUNDARY_VERTEX_NONE