Blender V5.0
blender::ed::sculpt_paint::boundary Namespace Reference

Classes

struct  LocalDataMesh
struct  LocalDataGrids
struct  LocalDataBMesh
struct  SculptBoundary

Functions

bool vert_is_boundary (const GroupedSpan< int > vert_to_face_map, const Span< bool > hide_poly, const BitSpan boundary, const int vert)
bool vert_is_boundary (const OffsetIndices< int > faces, const Span< int > corner_verts, const BitSpan boundary, const SubdivCCG &subdiv_ccg, const SubdivCCGCoord vert)
bool vert_is_boundary (BMVert *vert)
void ensure_boundary_info (Object &object)
static bool check_counts (const int neighbor_count, const int boundary_vertex_count)
static bool 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 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 is_vert_in_editable_boundary_bmesh (BMVert &initial_vert)
Nearest Boundary Vert
static std::optional< int > 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< SubdivCCGCoordget_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 * > get_closest_boundary_vert_bmesh (Object &object, BMesh *bm, BMVert &initial_vert, const float radius)
Edit Data Calculation
static void 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 edit_data_init_grids (const SubdivCCG &subdiv_ccg, const int initial_vert_i, const float radius, SculptBoundary &boundary)
static void edit_data_init_bmesh (BMesh *bm, const int initial_vert_i, const float radius, SculptBoundary &boundary)
Specialized Initialization

Methods for initializing specialized data inside SculptBoundary

static void bend_data_init_mesh (const Span< float3 > vert_positions, const Span< float3 > vert_normals, SculptBoundary &boundary)
static void bend_data_init_grids (const SubdivCCG &subdiv_ccg, SculptBoundary &boundary)
static void bend_data_init_bmesh (BMesh *bm, SculptBoundary &boundary)
static void slide_data_init_mesh (const Span< float3 > vert_positions, SculptBoundary &boundary)
static void slide_data_init_grids (const SubdivCCG &subdiv_ccg, SculptBoundary &boundary)
static void slide_data_init_bmesh (BMesh *bm, SculptBoundary &boundary)
static void populate_twist_data (const Span< float3 > positions, SculptBoundary &boundary)
static void twist_data_init_mesh (const Span< float3 > vert_positions, SculptBoundary &boundary)
static void twist_data_init_grids (const SubdivCCG &subdiv_ccg, SculptBoundary &boundary)
static void twist_data_init_bmesh (BMesh *bm, SculptBoundary &boundary)
Common helpers
static BLI_NOINLINE void filter_uninitialized_verts (const Span< int > propagation_steps, const MutableSpan< float > factors)
Bend Deformation
static BLI_NOINLINE void 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 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 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 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 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 calc_slide_position (const Span< float3 > positions, const Span< float3 > directions, const Span< float > factors, const MutableSpan< float3 > new_positions)
static void 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 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 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 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 calc_inflate_position (const Span< float3 > positions, const Span< float3 > normals, const Span< float > factors, const MutableSpan< float3 > new_positions)
static void 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 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 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 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 calc_grab_position (const Span< float3 > positions, const float3 grab_delta, const Span< float > factors, const MutableSpan< float3 > new_positions)
static void 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 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 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 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 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 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 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 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 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 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 calc_average_position (const Span< float3 > vert_positions, const Span< int > vert_propagation_steps, const GroupedSpan< int > neighbors, const Span< int > propagation_steps, const MutableSpan< float > factors, const MutableSpan< float3 > average_positions)
static BLI_NOINLINE void calc_average_position (const Span< int > vert_propagation_steps, const GroupedSpan< BMVert * > neighbors, const Span< int > propagation_steps, const MutableSpan< float > factors, const MutableSpan< float3 > average_positions)
static void 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 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 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 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 displacement_from_grab_delta_get (const SculptSession &ss, const SculptBoundary &boundary)
static std::pair< float, floatcalc_boundary_falloff (const SculptBoundary &boundary, const Brush &brush, const float radius, const int index)
static void init_falloff_mesh (const Span< float > mask, const Brush &brush, const float radius, SculptBoundary &boundary)
static void init_falloff_grids (const SubdivCCG &subdiv_ccg, const Brush &brush, const float radius, SculptBoundary &boundary)
static void init_falloff_bmesh (BMesh *bm, const Brush &brush, const float radius, SculptBoundary &boundary)
static void init_boundary_mesh (const Depsgraph &depsgraph, Object &object, const Brush &brush, const ePaintSymmetryFlags symm_area)
static void init_boundary_grids (Object &object, const Brush &brush, const ePaintSymmetryFlags symm_area)
static void init_boundary_bmesh (Object &object, const Brush &brush, const ePaintSymmetryFlags symm_area)
static float get_mesh_strength (const SculptSession &ss, const Brush &brush)
void do_boundary_brush (const Depsgraph &depsgraph, const Sculpt &sd, Object &ob, const IndexMask &node_mask)
Public API
std::unique_ptr< SculptBoundarydata_init (const Depsgraph &depsgraph, Object &object, const Brush *brush, const int initial_vert, const float radius)
std::unique_ptr< SculptBoundarydata_init_mesh (const Depsgraph &depsgraph, Object &object, const Brush *brush, const int initial_vert, const float radius)
std::unique_ptr< SculptBoundarydata_init_grids (Object &object, const Brush *brush, const SubdivCCGCoord initial_vert, const float radius)
std::unique_ptr< SculptBoundarydata_init_bmesh (Object &object, const Brush *brush, BMVert *initial_vert, const float radius)
Boundary Drawing

Helper methods to draw boundary information.

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

Boundary Index Calculation

constexpr int BOUNDARY_INDICES_BLOCK_SIZE = 300
static void add_index (SculptBoundary &boundary, const int new_index, const float distance, Set< int, BOUNDARY_INDICES_BLOCK_SIZE > &included_verts)
static void 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 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 indices_init_bmesh (Object &object, BMesh *bm, BMVert &initial_boundary_vert, SculptBoundary &boundary)

Function Documentation

◆ add_index()

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

◆ bend_data_init_bmesh()

void blender::ed::sculpt_paint::boundary::bend_data_init_bmesh ( BMesh * bm,
SculptBoundary & boundary )
static

◆ bend_data_init_grids()

void blender::ed::sculpt_paint::boundary::bend_data_init_grids ( const SubdivCCG & subdiv_ccg,
SculptBoundary & boundary )
static

◆ bend_data_init_mesh()

void blender::ed::sculpt_paint::boundary::bend_data_init_mesh ( const Span< float3 > vert_positions,
const Span< float3 > vert_normals,
SculptBoundary & boundary )
static

◆ calc_average_position() [1/2]

BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_average_position ( const Span< float3 > vert_positions,
const Span< int > vert_propagation_steps,
const GroupedSpan< int > neighbors,
const Span< int > propagation_steps,
const MutableSpan< float > factors,
const MutableSpan< float3 > average_positions )
static

◆ calc_average_position() [2/2]

BLI_NOINLINE void blender::ed::sculpt_paint::boundary::calc_average_position ( const Span< int > vert_propagation_steps,
const GroupedSpan< BMVert * > neighbors,
const Span< int > propagation_steps,
const MutableSpan< float > factors,
const MutableSpan< float3 > average_positions )
static

◆ calc_bend_bmesh()

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

Definition at line 1221 of file sculpt_boundary.cc.

References blender::ed::sculpt_paint::apply_translations(), blender::MutableSpan< T >::as_span(), blender::ed::sculpt_paint::StrokeCache::automasking, BKE_pbvh_bmesh_node_unique_verts(), SculptSession::bm_log, BRUSH_DEFORM_TARGET_CLOTH_SIM, BRUSH_DEFORM_TARGET_GEOMETRY, SculptSession::cache, calc_bend_position(), blender::ed::sculpt_paint::auto_mask::calc_vert_factors(), blender::ed::sculpt_paint::clip_and_lock_translations(), blender::ed::sculpt_paint::StrokeCache::cloth_sim, depsgraph, blender::ed::sculpt_paint::boundary::LocalDataBMesh::factors, filter_uninitialized_verts(), blender::ed::sculpt_paint::filter_verts_outside_symmetry_area(), blender::ed::sculpt_paint::gather_bmesh_positions(), blender::ed::sculpt_paint::gather_data_bmesh(), blender::ed::sculpt_paint::boundary::LocalDataBMesh::new_positions, blender::ed::sculpt_paint::orig_position_data_gather_bmesh(), blender::ed::sculpt_paint::boundary::LocalDataBMesh::pivot_axes, blender::ed::sculpt_paint::boundary::LocalDataBMesh::pivot_positions, blender::ed::sculpt_paint::boundary::LocalDataBMesh::positions, blender::ed::sculpt_paint::boundary::LocalDataBMesh::propagation_steps, blender::ed::sculpt_paint::scale_factors(), blender::ed::sculpt_paint::scatter_data_bmesh(), SCULPT_mesh_symmetry_xyz_get(), blender::ed::sculpt_paint::boundary::LocalDataBMesh::translations, blender::ed::sculpt_paint::translations_from_new_positions(), and verts.

Referenced by do_bend_brush().

◆ calc_bend_grids()

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

Definition at line 1155 of file sculpt_boundary.cc.

References blender::ed::sculpt_paint::apply_translations(), blender::MutableSpan< T >::as_span(), blender::ed::sculpt_paint::StrokeCache::automasking, BKE_subdiv_ccg_key_top_level(), BRUSH_DEFORM_TARGET_CLOTH_SIM, BRUSH_DEFORM_TARGET_GEOMETRY, SculptSession::cache, calc_bend_position(), blender::ed::sculpt_paint::auto_mask::calc_grids_factors(), blender::ed::sculpt_paint::clip_and_lock_translations(), blender::ed::sculpt_paint::StrokeCache::cloth_sim, depsgraph, blender::ed::sculpt_paint::boundary::LocalDataGrids::factors, filter_uninitialized_verts(), blender::ed::sculpt_paint::filter_verts_outside_symmetry_area(), blender::ed::sculpt_paint::gather_data_grids(), blender::ed::sculpt_paint::gather_grids_positions(), CCGKey::grid_area, blender::bke::pbvh::GridsNode::grids(), blender::ed::sculpt_paint::boundary::LocalDataGrids::new_positions, blender::ed::sculpt_paint::orig_position_data_get_grids(), blender::ed::sculpt_paint::boundary::LocalDataGrids::pivot_axes, blender::ed::sculpt_paint::boundary::LocalDataGrids::pivot_positions, blender::ed::sculpt_paint::boundary::LocalDataGrids::positions, blender::ed::sculpt_paint::OrigPositionData::positions, blender::ed::sculpt_paint::boundary::LocalDataGrids::propagation_steps, blender::ed::sculpt_paint::scale_factors(), blender::ed::sculpt_paint::scatter_data_grids(), SCULPT_mesh_symmetry_xyz_get(), blender::Span< T >::size(), blender::ed::sculpt_paint::boundary::LocalDataGrids::translations, and blender::ed::sculpt_paint::translations_from_new_positions().

Referenced by do_bend_brush().

◆ calc_bend_mesh()

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

◆ calc_bend_position()

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

◆ calc_boundary_falloff()

std::pair< float, float > blender::ed::sculpt_paint::boundary::calc_boundary_falloff ( const SculptBoundary & boundary,
const Brush & brush,
const float radius,
const int index )
static

◆ calc_grab_bmesh()

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

◆ calc_grab_grids()

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

◆ calc_grab_mesh()

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

◆ calc_grab_position()

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

◆ calc_inflate_bmesh()

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

◆ calc_inflate_grids()

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

Definition at line 1721 of file sculpt_boundary.cc.

References blender::ed::sculpt_paint::apply_translations(), blender::MutableSpan< T >::as_span(), blender::ed::sculpt_paint::StrokeCache::automasking, BKE_subdiv_ccg_key_top_level(), BRUSH_DEFORM_TARGET_CLOTH_SIM, BRUSH_DEFORM_TARGET_GEOMETRY, SculptSession::cache, blender::ed::sculpt_paint::auto_mask::calc_grids_factors(), calc_inflate_position(), blender::ed::sculpt_paint::clip_and_lock_translations(), blender::ed::sculpt_paint::StrokeCache::cloth_sim, depsgraph, blender::ed::sculpt_paint::boundary::LocalDataGrids::factors, filter_uninitialized_verts(), blender::ed::sculpt_paint::filter_verts_outside_symmetry_area(), blender::ed::sculpt_paint::gather_data_grids(), blender::ed::sculpt_paint::gather_grids_positions(), CCGKey::grid_area, blender::bke::pbvh::GridsNode::grids(), blender::ed::sculpt_paint::boundary::LocalDataGrids::new_positions, blender::ed::sculpt_paint::OrigPositionData::normals, blender::ed::sculpt_paint::orig_position_data_get_grids(), blender::ed::sculpt_paint::boundary::LocalDataGrids::positions, blender::ed::sculpt_paint::OrigPositionData::positions, blender::ed::sculpt_paint::boundary::LocalDataGrids::propagation_steps, blender::ed::sculpt_paint::scale_factors(), blender::ed::sculpt_paint::scatter_data_grids(), SCULPT_mesh_symmetry_xyz_get(), blender::Span< T >::size(), blender::ed::sculpt_paint::boundary::LocalDataGrids::translations, and blender::ed::sculpt_paint::translations_from_new_positions().

Referenced by do_inflate_brush().

◆ calc_inflate_mesh()

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

◆ calc_inflate_position()

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

◆ calc_slide_bmesh()

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

◆ calc_slide_grids()

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

Definition at line 1444 of file sculpt_boundary.cc.

References blender::ed::sculpt_paint::apply_translations(), blender::MutableSpan< T >::as_span(), blender::ed::sculpt_paint::StrokeCache::automasking, BKE_subdiv_ccg_key_top_level(), BRUSH_DEFORM_TARGET_CLOTH_SIM, BRUSH_DEFORM_TARGET_GEOMETRY, SculptSession::cache, blender::ed::sculpt_paint::auto_mask::calc_grids_factors(), calc_slide_position(), blender::ed::sculpt_paint::clip_and_lock_translations(), blender::ed::sculpt_paint::StrokeCache::cloth_sim, depsgraph, blender::ed::sculpt_paint::boundary::LocalDataGrids::factors, filter_uninitialized_verts(), blender::ed::sculpt_paint::filter_verts_outside_symmetry_area(), blender::ed::sculpt_paint::gather_data_grids(), blender::ed::sculpt_paint::gather_grids_positions(), CCGKey::grid_area, blender::bke::pbvh::GridsNode::grids(), blender::ed::sculpt_paint::boundary::LocalDataGrids::new_positions, blender::ed::sculpt_paint::orig_position_data_get_grids(), blender::ed::sculpt_paint::boundary::LocalDataGrids::pivot_positions, blender::ed::sculpt_paint::boundary::LocalDataGrids::positions, blender::ed::sculpt_paint::OrigPositionData::positions, blender::ed::sculpt_paint::boundary::LocalDataGrids::propagation_steps, blender::ed::sculpt_paint::scale_factors(), blender::ed::sculpt_paint::scatter_data_grids(), SCULPT_mesh_symmetry_xyz_get(), blender::Span< T >::size(), blender::ed::sculpt_paint::boundary::LocalDataGrids::translations, and blender::ed::sculpt_paint::translations_from_new_positions().

Referenced by do_slide_brush().

◆ calc_slide_mesh()

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

◆ calc_slide_position()

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

◆ calc_smooth_bmesh()

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

Definition at line 2680 of file sculpt_boundary.cc.

References blender::ed::sculpt_paint::apply_translations(), blender::MutableSpan< T >::as_span(), blender::ed::sculpt_paint::boundary::LocalDataBMesh::average_positions, BKE_pbvh_bmesh_node_unique_verts(), SculptSession::bm_log, BRUSH_DEFORM_TARGET_CLOTH_SIM, BRUSH_DEFORM_TARGET_GEOMETRY, SculptSession::cache, calc_average_position(), calc_smooth_position(), blender::ed::sculpt_paint::calc_vert_neighbors(), blender::ed::sculpt_paint::clip_and_lock_translations(), blender::ed::sculpt_paint::StrokeCache::cloth_sim, blender::ed::sculpt_paint::boundary::LocalDataBMesh::factors, filter_uninitialized_verts(), blender::ed::sculpt_paint::filter_verts_outside_symmetry_area(), blender::ed::sculpt_paint::gather_bmesh_positions(), blender::ed::sculpt_paint::gather_data_bmesh(), blender::ed::sculpt_paint::boundary::LocalDataBMesh::neighbor_data, blender::ed::sculpt_paint::boundary::LocalDataBMesh::neighbor_offsets, blender::ed::sculpt_paint::boundary::LocalDataBMesh::new_positions, blender::ed::sculpt_paint::orig_position_data_gather_bmesh(), blender::ed::sculpt_paint::boundary::LocalDataBMesh::positions, blender::ed::sculpt_paint::boundary::LocalDataBMesh::propagation_steps, blender::ed::sculpt_paint::scale_factors(), blender::ed::sculpt_paint::scatter_data_bmesh(), SCULPT_mesh_symmetry_xyz_get(), blender::ed::sculpt_paint::boundary::LocalDataBMesh::translations, blender::ed::sculpt_paint::translations_from_new_positions(), and verts.

Referenced by do_smooth_brush().

◆ calc_smooth_grids()

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

Definition at line 2611 of file sculpt_boundary.cc.

References blender::ed::sculpt_paint::apply_translations(), blender::MutableSpan< T >::as_span(), blender::ed::sculpt_paint::boundary::LocalDataGrids::average_positions, BKE_subdiv_ccg_key_top_level(), BRUSH_DEFORM_TARGET_CLOTH_SIM, BRUSH_DEFORM_TARGET_GEOMETRY, SculptSession::cache, calc_average_position(), calc_smooth_position(), blender::ed::sculpt_paint::calc_vert_neighbors(), blender::ed::sculpt_paint::clip_and_lock_translations(), blender::ed::sculpt_paint::StrokeCache::cloth_sim, blender::ed::sculpt_paint::boundary::LocalDataGrids::factors, filter_uninitialized_verts(), blender::ed::sculpt_paint::filter_verts_outside_symmetry_area(), blender::ed::sculpt_paint::gather_data_grids(), blender::ed::sculpt_paint::gather_grids_positions(), CCGKey::grid_area, blender::bke::pbvh::GridsNode::grids(), blender::ed::sculpt_paint::boundary::LocalDataGrids::neighbor_data, blender::ed::sculpt_paint::boundary::LocalDataGrids::neighbor_offsets, blender::ed::sculpt_paint::boundary::LocalDataGrids::new_positions, blender::ed::sculpt_paint::orig_position_data_get_grids(), blender::ed::sculpt_paint::boundary::LocalDataGrids::positions, blender::ed::sculpt_paint::OrigPositionData::positions, SubdivCCG::positions, blender::ed::sculpt_paint::boundary::LocalDataGrids::propagation_steps, blender::ed::sculpt_paint::scale_factors(), blender::ed::sculpt_paint::scatter_data_grids(), SCULPT_mesh_symmetry_xyz_get(), blender::Span< T >::size(), blender::ed::sculpt_paint::boundary::LocalDataGrids::translations, and blender::ed::sculpt_paint::translations_from_new_positions().

Referenced by do_smooth_brush().

◆ calc_smooth_mesh()

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

◆ calc_smooth_position()

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

◆ calc_twist_bmesh()

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

◆ calc_twist_grids()

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

◆ calc_twist_mesh()

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

◆ calc_twist_position()

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

◆ check_counts()

bool blender::ed::sculpt_paint::boundary::check_counts ( const int neighbor_count,
const int boundary_vertex_count )
static

◆ data_init()

std::unique_ptr< SculptBoundary > blender::ed::sculpt_paint::boundary::data_init ( const Depsgraph & depsgraph,
Object & object,
const Brush * brush,
int initial_vert,
float radius )

◆ data_init_bmesh()

◆ data_init_grids()

◆ data_init_mesh()

◆ displacement_from_grab_delta_get()

◆ do_bend_brush()

◆ do_boundary_brush()

◆ do_grab_brush()

◆ do_inflate_brush()

◆ do_slide_brush()

◆ do_smooth_brush()

◆ do_twist_brush()

◆ edges_preview_draw()

void blender::ed::sculpt_paint::boundary::edges_preview_draw ( const uint gpuattr,
SculptSession & ss,
const float outline_col[3],
const float outline_alpha )

◆ edit_data_init_bmesh()

void blender::ed::sculpt_paint::boundary::edit_data_init_bmesh ( BMesh * bm,
const int initial_vert_i,
const float radius,
SculptBoundary & boundary )
static

◆ edit_data_init_grids()

◆ edit_data_init_mesh()

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

This function initializes all data needed to calculate falloffs and deformation from the boundary into the mesh into a #SculptBoundaryEditInfo array. This includes how many steps are needed to go from a boundary vertex to an interior vertex and which vertex of the boundary is the closest one.

Definition at line 446 of file sculpt_boundary.cc.

References BOUNDARY_STEPS_NONE, BOUNDARY_VERTEX_NONE, blender::math::distance(), faces, i, blender::Span< T >::is_empty(), blender::Span< T >::size(), and blender::ed::sculpt_paint::vert_neighbors_get_mesh().

Referenced by data_init_mesh().

◆ ensure_boundary_info()

◆ filter_uninitialized_verts()

◆ get_closest_boundary_vert_bmesh()

std::optional< BMVert * > blender::ed::sculpt_paint::boundary::get_closest_boundary_vert_bmesh ( Object & object,
BMesh * bm,
BMVert & initial_vert,
const float radius )
static

◆ get_closest_boundary_vert_grids()

std::optional< SubdivCCGCoord > blender::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

◆ get_closest_boundary_vert_mesh()

std::optional< int > blender::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

From a vertex index anywhere in the mesh, returns the closest vertex in a mesh boundary inside the given radius, if it exists.

Definition at line 153 of file sculpt_boundary.cc.

References blender::math::distance_squared(), blender::Span< T >::is_empty(), blender::Span< T >::size(), and vert_is_boundary().

Referenced by data_init_mesh().

◆ get_mesh_strength()

◆ indices_init_bmesh()

void blender::ed::sculpt_paint::boundary::indices_init_bmesh ( Object & object,
BMesh * bm,
BMVert & initial_boundary_vert,
SculptBoundary & boundary )
static

◆ indices_init_grids()

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

◆ indices_init_mesh()

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

Determines the indices of a boundary.

Definition at line 323 of file sculpt_boundary.cc.

References add_index(), faces, is_vert_in_editable_boundary_mesh(), len_v3v3(), blender::Span< T >::size(), and vert_is_boundary().

Referenced by data_init_mesh().

◆ init_boundary_bmesh()

◆ init_boundary_grids()

◆ init_boundary_mesh()

◆ init_falloff_bmesh()

◆ init_falloff_grids()

◆ init_falloff_mesh()

void blender::ed::sculpt_paint::boundary::init_falloff_mesh ( const Span< float > mask,
const Brush & brush,
const float radius,
SculptBoundary & boundary )
static

These functions assign a falloff factor to each valid edit_info entry based on the brush curve, its propagation steps, and mask values. The falloff goes from the boundary into the mesh.

Definition at line 2883 of file sculpt_boundary.cc.

References BKE_brush_curve_strength(), BKE_curvemapping_init(), BLI_assert, Brush::boundary_falloff_type, BOUNDARY_STEPS_NONE, BRUSH_BOUNDARY_FALLOFF_CONSTANT, calc_boundary_falloff(), Brush::curve_distance_falloff, and i.

Referenced by init_boundary_mesh().

◆ is_vert_in_editable_boundary_bmesh()

bool blender::ed::sculpt_paint::boundary::is_vert_in_editable_boundary_bmesh ( BMVert & initial_vert)
static

◆ is_vert_in_editable_boundary_grids()

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

◆ is_vert_in_editable_boundary_mesh()

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

This function is used to check where the propagation should stop when calculating the boundary, as well as to check if the initial vertex is valid.

Definition at line 64 of file sculpt_boundary.cc.

References check_counts(), faces, blender::Span< T >::is_empty(), vert_is_boundary(), and blender::ed::sculpt_paint::vert_neighbors_get_mesh().

Referenced by data_init_mesh(), and indices_init_mesh().

◆ pivot_line_preview_draw()

void blender::ed::sculpt_paint::boundary::pivot_line_preview_draw ( const uint gpuattr,
SculptSession & ss )

◆ populate_twist_data()

void blender::ed::sculpt_paint::boundary::populate_twist_data ( const Span< float3 > positions,
SculptBoundary & boundary )
static

◆ preview_data_init()

◆ slide_data_init_bmesh()

void blender::ed::sculpt_paint::boundary::slide_data_init_bmesh ( BMesh * bm,
SculptBoundary & boundary )
static

◆ slide_data_init_grids()

void blender::ed::sculpt_paint::boundary::slide_data_init_grids ( const SubdivCCG & subdiv_ccg,
SculptBoundary & boundary )
static

◆ slide_data_init_mesh()

void blender::ed::sculpt_paint::boundary::slide_data_init_mesh ( const Span< float3 > vert_positions,
SculptBoundary & boundary )
static

Definition at line 860 of file sculpt_boundary.cc.

References BLI_assert, BOUNDARY_STEPS_NONE, i, and blender::math::normalize().

Referenced by init_boundary_mesh().

◆ twist_data_init_bmesh()

void blender::ed::sculpt_paint::boundary::twist_data_init_bmesh ( BMesh * bm,
SculptBoundary & boundary )
static

◆ twist_data_init_grids()

void blender::ed::sculpt_paint::boundary::twist_data_init_grids ( const SubdivCCG & subdiv_ccg,
SculptBoundary & boundary )
static

◆ twist_data_init_mesh()

void blender::ed::sculpt_paint::boundary::twist_data_init_mesh ( const Span< float3 > vert_positions,
SculptBoundary & boundary )
static

◆ vert_is_boundary() [1/3]

bool blender::ed::sculpt_paint::boundary::vert_is_boundary ( BMVert * vert)

Definition at line 517 of file sculpt.cc.

References BM_vert_is_boundary().

◆ vert_is_boundary() [2/3]

◆ vert_is_boundary() [3/3]

bool blender::ed::sculpt_paint::boundary::vert_is_boundary ( const OffsetIndices< int > faces,
const Span< int > corner_verts,
const BitSpan boundary,
const SubdivCCG & subdiv_ccg,
const SubdivCCGCoord vert )

Variable Documentation

◆ BOUNDARY_INDICES_BLOCK_SIZE

int blender::ed::sculpt_paint::boundary::BOUNDARY_INDICES_BLOCK_SIZE = 300
constexpr

Definition at line 307 of file sculpt_boundary.cc.