|
Blender V4.3
|
#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) ((vt) == (e)->v1 ? (e)->v2 : ((vt) == (e)->v2 ? (e)->v1 : nullptr)) |
| #define | VERT_COORD_TO_FLOAT(a) |
| #define | POS_TO_FLOAT(lpos, gpos) |
| #define | IN_BOUND(ba, eci) ba.l <= eci->pos[0] && ba.r >= eci->pos[0] && ba.b <= eci->pos[1] && ba.u >= eci->pos[1] |
| #define | IN_BOUND(ba, eci) ba.l <= eci->pos[0] && ba.r >= eci->pos[0] && ba.b <= eci->pos[1] && ba.u >= eci->pos[1] |
| #define | LRT_TEST_ADJACENT_AREAS(dist_to, list) |
| #define | LRT_ECI_INSIDE(eci) |
| #define IN_BOUND | ( | ba, | |
| eci ) ba.l <= eci->pos[0] && ba.r >= eci->pos[0] && ba.b <= eci->pos[1] && ba.u >= eci->pos[1] |
| #define LRT_ECI_INSIDE | ( | eci | ) |
Definition at line 1234 of file lineart_chain.cc.
Referenced by MOD_lineart_chain_clip_at_border().
| #define LRT_OTHER_VERT | ( | e, | |
| vt ) ((vt) == (e)->v1 ? (e)->v2 : ((vt) == (e)->v2 ? (e)->v1 : nullptr)) |
Definition at line 19 of file lineart_chain.cc.
Referenced by lineart_line_get_connected().
| #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 505 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 533 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 591 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 552 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 758 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, LineartEdgeChain::object_ref, LineartEdgeChainItem::pos, LineartEdgeChainItem::prev, LineartEdgeChain::type, and Object::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 1192 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 606 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 818 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, and LineartEdgeChainItem::shadow_mask_bits.
Referenced by MOD_lineart_chain_feature_lines().
| LineartElementLinkNode * lineart_find_matching_eln_obj | ( | ListBase * | elns, |
| Object * | ob ) |
Definition at line 1087 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, 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.
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 1077 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 1238 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, 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 1035 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 930 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, 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 1068 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 1055 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_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 1399 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 1360 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(), 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 1303 of file lineart_chain.cc.
References 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, and LineartEdgeChain::type.
Referenced by MOD_lineart_compute_feature_lines_v3().
| void MOD_lineart_chain_split_for_fixed_occlusion | ( | LineartData * | ld | ) |
Definition at line 663 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, and LineartEdgeChain::type.
Referenced by MOD_lineart_compute_feature_lines_v3().
| void MOD_lineart_finalize_chains | ( | LineartData * | ld | ) |
Definition at line 1097 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 1120 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, sub_v2_v2v2(), and vec3().
Referenced by MOD_lineart_compute_feature_lines_v3().