|
Blender V4.5
|
#include "BLI_listbase.h"#include "BLI_math_geom.h"#include "MOD_lineart.hh"#include "lineart_intern.hh"#include <algorithm>#include <cmath>Go to the source code of this file.
Macros | |
| #define | LRT_OTHER_VERT(e, vt) |
| #define | VERT_COORD_TO_FLOAT(a) |
| #define | POS_TO_FLOAT(lpos, gpos) |
| #define | IN_BOUND(ba, eci) |
| #define | IN_BOUND(ba, eci) |
| #define | LRT_TEST_ADJACENT_AREAS(dist_to, list) |
| #define | LRT_ECI_INSIDE(eci) |
| #define IN_BOUND | ( | ba, | |
| eci ) |
| #define IN_BOUND | ( | ba, | |
| eci ) |
Referenced by lineart_bounding_area_get_eci_recursive(), and lineart_bounding_area_link_point_recursive().
| #define LRT_ECI_INSIDE | ( | eci | ) |
Definition at line 1241 of file lineart_chain.cc.
Referenced by MOD_lineart_chain_clip_at_border().
| #define LRT_OTHER_VERT | ( | e, | |
| vt ) |
| #define LRT_TEST_ADJACENT_AREAS | ( | dist_to, | |
| list ) |
Referenced by lineart_chain_get_closest_cre().
| #define POS_TO_FLOAT | ( | lpos, | |
| gpos ) |
Referenced by MOD_lineart_chain_feature_lines().
| #define VERT_COORD_TO_FLOAT | ( | a | ) |
Referenced by MOD_lineart_chain_feature_lines().
|
static |
Definition at line 512 of file lineart_chain.cc.
References LineartBoundingArea::child, IN_BOUND, and lineart_bounding_area_get_eci_recursive().
Referenced by lineart_bounding_area_get_eci_recursive(), and lineart_bounding_area_get_end_point().
|
static |
Definition at line 540 of file lineart_chain.cc.
References lineart_bounding_area_get_eci_recursive(), MOD_lineart_get_parent_bounding_area(), and LineartEdgeChainItem::pos.
Referenced by MOD_lineart_chain_connect().
|
static |
Definition at line 598 of file lineart_chain.cc.
References LineartEdgeChain::chain, ListBase::first, ListBase::last, lineart_bounding_area_link_point_recursive(), MOD_lineart_get_parent_bounding_area(), and LineartEdgeChainItem::pos.
Referenced by MOD_lineart_chain_split_for_fixed_occlusion().
|
static |
Here we will try to connect geometry space chains together in image space. However we can't chain two chains together if their end and start points lie on the border between two bounding areas, this happens either when 1) the geometry is way too dense, or 2) the chaining threshold is too big that it covers multiple small bounding areas.
Definition at line 559 of file lineart_chain.cc.
References LineartEdgeChain::chain, LineartData::chain_data_pool, LineartBoundingArea::child, LineartChainRegisterEntry::eci, ListBase::first, IN_BOUND, LineartChainRegisterEntry::is_left, lineart_bounding_area_link_point_recursive(), lineart_list_append_pointer_pool_sized(), and LineartBoundingArea::linked_chains.
Referenced by lineart_bounding_area_link_chain(), and lineart_bounding_area_link_point_recursive().
|
static |
Definition at line 99 of file lineart_chain.cc.
References BLI_addtail(), LineartEdgeChain::chain, LineartData::chain_data_pool, copy_v3_v3(), copy_v4_v4(), e, LineartEdgeChainItem::gpos, LineartEdgeChainItem::index, Object::index, ListBase::last, LineartEdgeChainItem::line_type, lineart_mem_acquire(), lineart_point_overlapping(), LineartEdgeChainItem::material_mask_bits, MOD_LINEART_EDGE_FLAG_ALL_TYPE, LineartEdgeChainItem::normal, LineartEdgeChainItem::occlusion, LineartEdgeChainItem::pos, LineartEdgeChainItem::shadow_mask_bits, and Object::type.
Referenced by MOD_lineart_chain_feature_lines(), MOD_lineart_chain_split_angle(), and MOD_lineart_chain_split_for_fixed_occlusion().
|
static |
NOTE: segment type (crease/material/contour...) is ambiguous after this.
Definition at line 765 of file lineart_chain.cc.
References BLI_listbase_reverse(), BLI_pophead(), LineartEdgeChain::chain, e, ListBase::first, ListBase::last, lineart_point_overlapping(), MOD_LINEART_EDGE_FLAG_CONTOUR, MOD_LINEART_EDGE_FLAG_INTERSECTION, LineartEdgeChainItem::next, LineartEdgeChain::object_ref, LineartEdgeChainItem::pos, LineartEdgeChainItem::prev, and LineartEdgeChain::type.
Referenced by MOD_lineart_chain_connect().
|
static |
Definition at line 72 of file lineart_chain.cc.
References BLI_addtail(), LineartData::chain_data_pool, LineartData::chains, and lineart_mem_acquire().
Referenced by MOD_lineart_chain_feature_lines(), MOD_lineart_chain_split_angle(), and MOD_lineart_chain_split_for_fixed_occlusion().
|
static |
Definition at line 1199 of file lineart_chain.cc.
References LineartData::chain_data_pool, fabs(), LineartEdgeChainItem::gpos, interp_v3_v3v3(), interpf(), isect_seg_seg_v2_point(), lineart_mem_acquire(), LineartEdgeChainItem::next, LineartEdgeChainItem::pos, LineartEdgeChainItem::prev, ratiof(), and UNLIKELY.
Referenced by MOD_lineart_chain_clip_at_border().
|
static |
Definition at line 613 of file lineart_chain.cc.
References BLI_remlink(), LineartEdgeChain::chain, len_v2v2(), LineartEdgeChainItem::material_mask_bits, LineartEdgeChainItem::next, LineartEdgeChainItem::occlusion, LineartEdgeChainItem::pos, and LineartEdgeChainItem::shadow_mask_bits.
Referenced by MOD_lineart_chain_split_for_fixed_occlusion().
|
static |
Definition at line 825 of file lineart_chain.cc.
References LineartBoundingArea::b, LineartBoundingArea::bp, LineartData::conf, LineartData::_conf::fuzzy_everything, LineartData::_conf::fuzzy_intersections, LineartEdgeChainItem::gpos, LineartBoundingArea::l, len_v2v2(), len_v3v3(), LineartBoundingArea::linked_chains, LISTBASE_FOREACH_MUTABLE, LineartBoundingArea::lp, LRT_TEST_ADJACENT_AREAS, MOD_LINEART_EDGE_FLAG_INTERSECTION, LineartEdgeChain::object_ref, LineartEdgeChainItem::pos, LineartBoundingArea::r, LineartBoundingArea::rp, LineartEdgeChain::type, LineartBoundingArea::u, LineartBoundingArea::up, and LineartData::_conf::use_geometry_space_chain.
Referenced by MOD_lineart_chain_connect().
|
static |
Definition at line 142 of file lineart_chain.cc.
References BLI_addhead(), LineartEdgeChain::chain, LineartData::chain_data_pool, copy_v3_v3(), copy_v4_v4(), e, ListBase::first, LineartEdgeChainItem::gpos, LineartEdgeChainItem::index, Object::index, LineartEdgeChainItem::line_type, lineart_mem_acquire(), lineart_point_overlapping(), LineartEdgeChainItem::material_mask_bits, MOD_LINEART_EDGE_FLAG_ALL_TYPE, LineartEdgeChainItem::normal, LineartEdgeChainItem::occlusion, LineartEdgeChainItem::pos, LineartEdgeChainItem::shadow_mask_bits, and Object::type.
Referenced by MOD_lineart_chain_feature_lines().
| LineartElementLinkNode * lineart_find_matching_eln_obj | ( | ListBase * | elns, |
| Object * | ob ) |
Definition at line 1094 of file lineart_chain.cc.
References LISTBASE_FOREACH.
Referenced by MOD_lineart_finalize_chains().
|
static |
Definition at line 25 of file lineart_chain.cc.
References LineartVert::fbcoord, LineartEdge::flags, i, LineartEdge::intersection_mask, LineartBoundingArea::line_count, LineartBoundingArea::linked_lines, LRT_OTHER_VERT, MOD_LINEART_EDGE_FLAG_ALL_TYPE, MOD_LINEART_EDGE_FLAG_CHAIN_PICKED, MOD_LINEART_EDGE_FLAG_INTERSECTION, LineartEdge::object_ref, LineartEdge::v1, and LineartEdge::v2.
Referenced by MOD_lineart_chain_feature_lines().
|
static |
Definition at line 83 of file lineart_chain.cc.
References LineartEdgeChainItem::pos, x, and y.
Referenced by lineart_chain_append_point(), lineart_chain_connect(), lineart_chain_prepend_point(), and MOD_lineart_chain_split_for_fixed_occlusion().
| void MOD_lineart_chain_clear_picked_flag | ( | LineartCache * | lc | ) |
Definition at line 1084 of file lineart_chain.cc.
References LineartCache::chains, and LISTBASE_FOREACH.
Referenced by bake_strokes(), blender::generate_strokes(), and MOD_lineart_compute_feature_lines_v3().
| void MOD_lineart_chain_clip_at_border | ( | LineartData * | ld | ) |
Definition at line 1245 of file lineart_chain.cc.
References BLI_addhead(), BLI_addtail(), BLI_pophead(), LineartEdgeChain::chain, LineartData::chain_data_pool, LineartData::chains, ListBase::first, is_inside(), ListBase::last, lineart_chain_create_crossing_point(), lineart_mem_acquire(), LRT_ECI_INSIDE, LineartEdgeChainItem::next, LineartEdgeChainItem::prev, swap, and true.
Referenced by MOD_lineart_compute_feature_lines_v3().
| float MOD_lineart_chain_compute_length | ( | LineartEdgeChain * | ec | ) |
Length is in image space.
Definition at line 1042 of file lineart_chain.cc.
References LineartEdgeChain::chain, copy_v2_v2(), ListBase::first, len_v2v2(), LISTBASE_FOREACH, and LineartEdgeChainItem::pos.
Referenced by MOD_lineart_chain_discard_unused().
| void MOD_lineart_chain_connect | ( | LineartData * | ld | ) |
This function only connects two different chains. It will not do any clean up or smart chaining. So no: removing overlapping chains, removal of short isolated segments, and no loop reduction is implemented yet.
Definition at line 937 of file lineart_chain.cc.
References BLI_addtail(), BLI_pophead(), BLI_remlink(), LineartData::_conf::chaining_image_threshold, LineartData::chains, LineartData::conf, LineartChainRegisterEntry::ec, ListBase::first, LineartChainRegisterEntry::is_left, ListBase::last, lineart_bounding_area_get_end_point(), lineart_chain_connect(), lineart_chain_get_closest_cre(), LineartBoundingArea::linked_chains, MOD_LINEART_EDGE_FLAG_LOOSE, LineartChainRegisterEntry::picked, LineartEdgeChain::picked, swap, and LineartData::_conf::use_loose_edge_chain.
Referenced by MOD_lineart_compute_feature_lines_v3().
| int MOD_lineart_chain_count | ( | const LineartEdgeChain * | ec | ) |
Definition at line 1075 of file lineart_chain.cc.
References LineartEdgeChain::chain, count, and LISTBASE_FOREACH.
Referenced by MOD_lineart_gpencil_generate_v3().
| void MOD_lineart_chain_discard_unused | ( | LineartData * | ld, |
| const float | threshold, | ||
| uint8_t | max_occlusion ) |
Definition at line 1062 of file lineart_chain.cc.
References BLI_remlink(), LineartData::chains, ListBase::first, LineartEdgeChain::level, MOD_lineart_chain_compute_length(), and LineartEdgeChain::next.
Referenced by MOD_lineart_chain_split_for_fixed_occlusion().
| void MOD_lineart_chain_feature_lines | ( | LineartData * | ld | ) |
Definition at line 177 of file lineart_chain.cc.
References LineartEdgeChain::chain, LineartData::conf, e, LineartVert::fbcoord, ListBase::first, LineartEdge::flags, LineartData::_conf::fuzzy_everything, LineartVert::gloc, LineartTriangle::gn, LineartVert::index, interp_v3_v3v3_db(), interpf(), LineartEdgeChain::intersection_mask, ListBase::last, LineartEdgeChainItem::line_type, lineart_chain_append_point(), lineart_chain_create(), lineart_chain_prepend_point(), lineart_line_get_connected(), LISTBASE_FOREACH_BACKWARD, LRT_ITER_ALL_LINES_BEGIN, LRT_ITER_ALL_LINES_END, LRT_ITER_ALL_LINES_NEXT, LineartEdgeChainItem::material_mask_bits, LineartEdgeSegment::material_mask_bits, MOD_LINEART_EDGE_FLAG_ALL_TYPE, MOD_LINEART_EDGE_FLAG_CHAIN_PICKED, MOD_LINEART_EDGE_FLAG_CONTOUR, MOD_LINEART_EDGE_FLAG_PROJECTED_SHADOW, MOD_lineart_get_bounding_area(), N, LineartEdgeSegment::next, normalize_v3(), LineartEdgeChain::object_ref, LineartEdgeChainItem::occlusion, LineartEdgeSegment::occlusion, POS_TO_FLOAT, LineartEdgeSegment::prev, LineartEdgeSegment::ratio, LineartEdge::segments, LineartEdgeChainItem::shadow_mask_bits, LineartEdgeSegment::shadow_mask_bits, LineartEdge::t1, LineartEdge::t2, LineartEdgeChain::type, LineartEdge::v1, LineartEdge::v2, VERT_COORD_TO_FLOAT, and zero_v3().
Referenced by MOD_lineart_compute_feature_lines_v3().
| void MOD_lineart_chain_find_silhouette_backdrop_objects | ( | LineartData * | ld | ) |
Definition at line 1406 of file lineart_chain.cc.
References LineartData::chains, LineartData::geom, LineartData::_geom::line_buffer_pointers, lineart_find_matching_eln(), LISTBASE_FOREACH, LRT_OBINDEX_HIGHER, LRT_SHADOW_SILHOUETTE_ERASED_GROUP, MOD_LINEART_EDGE_FLAG_CONTOUR, and LineartElementLinkNode::object_ref.
Referenced by MOD_lineart_compute_feature_lines_v3().
| void MOD_lineart_chain_offset_towards_camera | ( | LineartData * | ld, |
| float | dist, | ||
| bool | use_custom_camera ) |
Definition at line 1367 of file lineart_chain.cc.
References LineartData::_conf::active_camera_pos, add_v3_v3(), LineartData::_conf::cam_is_persp, LineartData::_conf::camera_pos, LineartData::chains, LineartData::conf, copy_v3fl_v3db(), dot_v3v3(), len_v3(), LISTBASE_FOREACH, mul_v3_fl(), LineartData::_conf::near_clip, normalize_v3(), normalize_v3_v3(), sub_v3_v3v3(), view, and LineartData::_conf::view_vector.
Referenced by MOD_lineart_compute_feature_lines_v3().
| void MOD_lineart_chain_split_angle | ( | LineartData * | ld, |
| float | angle_threshold_rad ) |
This should always be the last stage!, see the end of MOD_lineart_chain_split_for_fixed_occlusion().
Definition at line 1310 of file lineart_chain.cc.
References angle(), angle_v2v2v2(), BLI_addtail(), BLI_pophead(), LineartEdgeChain::chain, LineartData::chains, ListBase::first, LineartEdgeChainItem::gpos, LineartEdgeChainItem::index, LineartEdgeChain::intersection_mask, ListBase::last, LineartEdgeChain::level, LineartEdgeChainItem::line_type, lineart_chain_append_point(), lineart_chain_create(), LineartEdgeChain::loop_id, M_PI, LineartEdgeChain::material_mask_bits, LineartEdgeChainItem::material_mask_bits, LineartEdgeChainItem::next, LineartEdgeChainItem::normal, LineartEdgeChain::object_ref, LineartEdgeChainItem::pos, LineartEdgeChainItem::prev, LineartEdgeChain::shadow_mask_bits, LineartEdgeChainItem::shadow_mask_bits, swap, and LineartEdgeChain::type.
Referenced by MOD_lineart_compute_feature_lines_v3().
| void MOD_lineart_chain_split_for_fixed_occlusion | ( | LineartData * | ld | ) |
Definition at line 670 of file lineart_chain.cc.
References BLI_addtail(), BLI_pophead(), LineartEdgeChain::chain, LineartData::_conf::chain_preserve_details, LineartData::_conf::chaining_image_threshold, LineartData::chains, LineartData::conf, DBL_EDGE_LIM, e, ListBase::first, LineartEdgeChainItem::gpos, LineartEdgeChainItem::index, LineartEdgeChain::intersection_mask, ListBase::last, LineartEdgeChainItem::line_type, lineart_bounding_area_link_chain(), lineart_chain_append_point(), lineart_chain_create(), lineart_chain_fix_ambiguous_segments(), lineart_point_overlapping(), LISTBASE_FOREACH, LineartEdgeChain::loop_id, LineartEdgeChainItem::material_mask_bits, LineartData::_conf::max_occlusion_level, MOD_lineart_chain_discard_unused(), LineartEdgeChainItem::next, LineartEdgeChainItem::normal, LineartEdgeChain::object_ref, LineartEdgeChainItem::occlusion, LineartEdgeChainItem::pos, LineartEdgeChainItem::prev, LineartEdgeChainItem::shadow_mask_bits, swap, and LineartEdgeChain::type.
Referenced by MOD_lineart_compute_feature_lines_v3().
| void MOD_lineart_finalize_chains | ( | LineartData * | ld | ) |
Definition at line 1104 of file lineart_chain.cc.
References BLI_assert, LineartData::chains, ELEM, LineartData::geom, LineartElementLinkNode::global_index_offset, LIKELY, lineart_find_matching_eln_obj(), LISTBASE_FOREACH, MOD_LINEART_EDGE_FLAG_INTERSECTION, MOD_LINEART_EDGE_FLAG_LIGHT_CONTOUR, MOD_LINEART_EDGE_FLAG_PROJECTED_SHADOW, and LineartData::_geom::vertex_buffer_pointers.
Referenced by MOD_lineart_compute_feature_lines_v3().
| void MOD_lineart_smooth_chains | ( | LineartData * | ld, |
| float | tolerance ) |
Definition at line 1127 of file lineart_chain.cc.
References BLI_listbase_reverse(), BLI_remlink(), LineartData::chains, dist_to_line_segment_v2(), dist_to_line_v2(), dot_v2v2(), len_v2(), LISTBASE_FOREACH, LineartEdgeChainItem::next, normalize_v2_v2(), LineartEdgeChainItem::pos, and sub_v2_v2v2().
Referenced by MOD_lineart_compute_feature_lines_v3().