Blender V4.3
grease_pencil_geom.cc File Reference
#include <algorithm>
#include <limits>
#include "BLI_array_utils.hh"
#include "BLI_enumerable_thread_specific.hh"
#include "BLI_kdopbvh.h"
#include "BLI_kdtree.h"
#include "BLI_math_vector.hh"
#include "BLI_offset_indices.hh"
#include "BLI_rect.h"
#include "BLI_stack.hh"
#include "BLI_task.hh"
#include "BKE_attribute.hh"
#include "BKE_curves.hh"
#include "BKE_curves_utils.hh"
#include "BKE_grease_pencil.hh"
#include "DNA_curves_types.h"
#include "ED_curves.hh"
#include "ED_grease_pencil.hh"
#include "ED_view3d.hh"
#include "GEO_merge_curves.hh"
#include "curve_fit_nd.h"

Go to the source code of this file.

Classes

struct  blender::ed::greasepencil::PerimeterData
 
struct  blender::ed::greasepencil::trim::Segment
 
struct  blender::ed::greasepencil::trim::Segments
 

Namespaces

namespace  blender
 
namespace  blender::ed
 
namespace  blender::ed::greasepencil
 
namespace  blender::ed::greasepencil::trim
 

Enumerations

enum  blender::ed::greasepencil::trim::Side : uint8_t { blender::ed::greasepencil::trim::Start = 0 , blender::ed::greasepencil::trim::End = 1 }
 
enum  blender::ed::greasepencil::trim::Distance : uint8_t { blender::ed::greasepencil::trim::Min = 0 , blender::ed::greasepencil::trim::Max = 1 }
 

Functions

int64_t blender::ed::greasepencil::ramer_douglas_peucker_simplify (const IndexRange range, const float epsilon, const FunctionRef< float(int64_t, int64_t, int64_t)> dist_function, MutableSpan< bool > points_to_delete)
 
Array< float2blender::ed::greasepencil::polyline_fit_curve (Span< float2 > points, const float error_threshold, const IndexMask &corner_mask)
 
IndexMask blender::ed::greasepencil::polyline_detect_corners (Span< float2 > points, const float radius_min, const float radius_max, const int samples_max, const float angle_threshold, IndexMaskMemory &memory)
 
int blender::ed::greasepencil::curve_merge_by_distance (const IndexRange points, const Span< float > distances, const IndexMask &selection, const float merge_distance, MutableSpan< int > r_merge_indices)
 
blender::bke::CurvesGeometry blender::ed::greasepencil::curves_merge_by_distance (const bke::CurvesGeometry &src_curves, const float merge_distance, const IndexMask &selection, const bke::AttributeFilter &attribute_filter)
 
bke::CurvesGeometry blender::ed::greasepencil::curves_merge_endpoints_by_distance (const ARegion &region, const bke::CurvesGeometry &src_curves, const float4x4 &layer_to_world, const float merge_distance, const IndexMask &selection, const bke::AttributeFilter &attribute_filter)
 
static void blender::ed::greasepencil::generate_arc_from_point_to_point (const float3 &from, const float3 &to, const float3 &center_pt, const int corner_subdivisions, const int src_point_index, Vector< float3 > &r_perimeter, Vector< int > &r_src_indices)
 
static void blender::ed::greasepencil::generate_cap (const float3 &point, const float3 &tangent, const float radius, const int corner_subdivisions, const eGPDstroke_Caps cap_type, const int src_point_index, Vector< float3 > &r_perimeter, Vector< int > &r_src_indices)
 
static void blender::ed::greasepencil::generate_corner (const float3 &pt_a, const float3 &pt_b, const float3 &pt_c, const float radius, const int corner_subdivisions, const int src_point_index, Vector< float3 > &r_perimeter, Vector< int > &r_src_indices)
 
static void blender::ed::greasepencil::generate_stroke_perimeter (const Span< float3 > all_positions, const Span< float > all_radii, const IndexRange points, const int corner_subdivisions, const bool is_cyclic, const bool use_caps, const eGPDstroke_Caps start_cap_type, const eGPDstroke_Caps end_cap_type, const float outline_offset, Vector< float3 > &r_perimeter, Vector< int > &r_point_counts, Vector< int > &r_point_indices)
 
bke::CurvesGeometry blender::ed::greasepencil::create_curves_outline (const bke::greasepencil::Drawing &drawing, const IndexMask &strokes, const float4x4 &transform, const int corner_subdivisions, const float outline_radius, const float outline_offset, const int material_index)
 
static float blender::ed::greasepencil::trim::get_intersection_distance_of_segments (const float2 &co_a, const float2 &co_b, const float2 &co_c, const float2 &co_d)
 
static void blender::ed::greasepencil::trim::get_intersections_of_curve_with_curves (const int src_curve, const bke::CurvesGeometry &src, const Span< float2 > screen_space_positions, const Span< rcti > screen_space_curve_bounds, MutableSpan< bool > r_is_intersected_after_point, MutableSpan< float2 > r_intersection_distance)
 
static void blender::ed::greasepencil::trim::expand_trim_segment_direction (Segment &segment, const int direction, const bke::CurvesGeometry &src, const Span< bool > is_intersected_after_point, const Span< float2 > intersection_distance, MutableSpan< bool > point_is_in_segment)
 
static void blender::ed::greasepencil::trim::expand_trim_segment (Segment &segment, const bke::CurvesGeometry &src, const Span< bool > is_intersected_after_point, const Span< float2 > intersection_distance, MutableSpan< bool > point_is_in_segment)
 
bke::CurvesGeometry blender::ed::greasepencil::trim::trim_curve_segments (const bke::CurvesGeometry &src, const Span< float2 > screen_space_positions, const Span< rcti > screen_space_curve_bounds, const IndexMask &curve_selection, const Vector< Vector< int > > &selected_points_in_curves, const bool keep_caps)
 
Curves2DBVHTree blender::ed::greasepencil::build_curves_2d_bvh_from_visible (const ViewContext &vc, const Object &object, const GreasePencil &grease_pencil, Span< MutableDrawingInfo > drawings, const int frame_number)
 
void blender::ed::greasepencil::free_curves_2d_bvh_data (Curves2DBVHTree &data)
 
void blender::ed::greasepencil::find_curve_intersections (const bke::CurvesGeometry &curves, const IndexMask &curve_mask, const Span< float2 > screen_space_positions, const Curves2DBVHTree &tree_data, const IndexRange tree_data_range, MutableSpan< bool > r_hits, std::optional< MutableSpan< float > > r_first_intersect_factors, std::optional< MutableSpan< float > > r_last_intersect_factors)
 
CurveSegmentsData blender::ed::greasepencil::find_curve_segments (const bke::CurvesGeometry &curves, const IndexMask &curve_mask, const Span< float2 > screen_space_positions, const Curves2DBVHTree &tree_data, const IndexRange tree_data_range)
 

Variables

static constexpr int blender::ed::greasepencil::trim::BBOX_PADDING = 2
 
static constexpr float blender::ed::greasepencil::trim::DISTANCE_FACTOR_THRESHOLD = 0.01f