|
Blender
V2.93
|
#include "BLI_linklist.h"#include "BLI_listbase.h"#include "BLI_math.h"#include "MOD_lineart.h"#include "lineart_intern.h"#include <math.h>Go to the source code of this file.
Macros | |
| #define | LRT_OTHER_RV(e, rv) ((rv) == (e)->v1 ? (e)->v2 : ((rv) == (e)->v2 ? (e)->v1 : NULL)) |
| #define | VERT_COORD_TO_FLOAT(a) |
| #define | POS_TO_FLOAT(lpos, gpos) |
| #define | IN_BOUND(ba, rlci) ba.l <= rlci->pos[0] && ba.r >= rlci->pos[0] && ba.b <= rlci->pos[1] && ba.u >= rlci->pos[1] |
| #define | IN_BOUND(ba, rlci) ba.l <= rlci->pos[0] && ba.r >= rlci->pos[0] && ba.b <= rlci->pos[1] && ba.u >= rlci->pos[1] |
| #define | LRT_TEST_ADJACENT_AREAS(dist_to, list) |
| #define IN_BOUND | ( | ba, | |
| rlci | |||
| ) | ba.l <= rlci->pos[0] && ba.r >= rlci->pos[0] && ba.b <= rlci->pos[1] && ba.u >= rlci->pos[1] |
| #define IN_BOUND | ( | ba, | |
| rlci | |||
| ) | ba.l <= rlci->pos[0] && ba.r >= rlci->pos[0] && ba.b <= rlci->pos[1] && ba.u >= rlci->pos[1] |
Definition at line 34 of file lineart_chain.c.
| #define LRT_TEST_ADJACENT_AREAS | ( | dist_to, | |
| list | |||
| ) |
| #define POS_TO_FLOAT | ( | lpos, | |
| gpos | |||
| ) |
| #define VERT_COORD_TO_FLOAT | ( | a | ) |
|
static |
Definition at line 489 of file lineart_chain.c.
References lineart_bounding_area_get_rlci_recursive(), MOD_lineart_get_parent_bounding_area(), NULL, and LineartLineChainItem::pos.
Referenced by MOD_lineart_chain_connect().
|
static |
Definition at line 461 of file lineart_chain.c.
References LineartBoundingArea::child, IN_BOUND, and NULL.
Referenced by lineart_bounding_area_get_end_point().
|
static |
Definition at line 546 of file lineart_chain.c.
References LineartLineChain::chain, ListBase::first, ListBase::last, lineart_bounding_area_link_point_recursive(), MOD_lineart_get_parent_bounding_area(), and LineartLineChainItem::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 508 of file lineart_chain.c.
References LineartLineChain::chain, LineartBoundingArea::child, ListBase::first, IN_BOUND, LineartChainRegisterEntry::is_left, lineart_list_append_pointer_pool_sized(), LineartBoundingArea::linked_chains, NULL, LineartRenderBuffer::render_data_pool, and LineartChainRegisterEntry::rlci.
Referenced by lineart_bounding_area_link_chain().
|
static |
Definition at line 99 of file lineart_chain.c.
References BLI_addtail(), LineartLineChain::chain, copy_v2_v2(), copy_v3_v3(), e, LineartLineChainItem::gpos, LineartLineChainItem::index, ListBase::last, LineartLineChainItem::line_type, lineart_mem_aquire(), lineart_point_overlapping(), LRT_EDGE_FLAG_ALL_TYPE, normal, LineartLineChainItem::normal, LineartLineChainItem::occlusion, LineartLineChainItem::pos, LineartRenderBuffer::render_data_pool, LineartLineChainItem::transparency_mask, and 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 631 of file lineart_chain.c.
References BLI_listbase_reverse(), BLI_pophead(), LineartLineChain::chain, e, ListBase::first, ListBase::last, lineart_point_overlapping(), LRT_EDGE_FLAG_CONTOUR, LRT_EDGE_FLAG_INTERSECTION, NULL, LineartLineChain::object_ref, LineartLineChainItem::pos, and LineartLineChain::type.
Referenced by MOD_lineart_chain_connect().
|
static |
Definition at line 74 of file lineart_chain.c.
References BLI_addtail(), LineartRenderBuffer::chains, lineart_mem_aquire(), and LineartRenderBuffer::render_data_pool.
Referenced by MOD_lineart_chain_feature_lines(), MOD_lineart_chain_split_angle(), and MOD_lineart_chain_split_for_fixed_occlusion().
|
static |
Definition at line 681 of file lineart_chain.c.
References LineartBoundingArea::b, LineartBoundingArea::bp, LineartRenderBuffer::fuzzy_everything, LineartRenderBuffer::fuzzy_intersections, LineartBoundingArea::l, len_v2v2(), LineartBoundingArea::linked_chains, LISTBASE_FOREACH_MUTABLE, LineartBoundingArea::lp, LRT_EDGE_FLAG_INTERSECTION, LRT_TEST_ADJACENT_AREAS, NULL, LineartLineChain::object_ref, LineartLineChainItem::pos, LineartBoundingArea::r, LineartBoundingArea::rp, LineartLineChain::type, LineartBoundingArea::u, and LineartBoundingArea::up.
Referenced by MOD_lineart_chain_connect().
|
static |
Definition at line 136 of file lineart_chain.c.
References BLI_addhead(), LineartLineChain::chain, copy_v2_v2(), copy_v3_v3(), e, ListBase::first, LineartLineChainItem::gpos, LineartLineChainItem::index, LineartLineChainItem::line_type, lineart_mem_aquire(), lineart_point_overlapping(), LRT_EDGE_FLAG_ALL_TYPE, normal, LineartLineChainItem::normal, LineartLineChainItem::occlusion, LineartLineChainItem::pos, LineartRenderBuffer::render_data_pool, LineartLineChainItem::transparency_mask, and type.
Referenced by MOD_lineart_chain_feature_lines().
|
static |
Definition at line 38 of file lineart_chain.c.
References LineartVert::fbcoord, LineartEdge::flags, LineartBoundingArea::linked_lines, LISTBASE_FOREACH, LRT_EDGE_FLAG_ALL_TYPE, LRT_EDGE_FLAG_CHAIN_PICKED, LRT_EDGE_FLAG_INTERSECTION, LRT_OTHER_RV, NULL, LineartEdge::v1, and LineartEdge::v2.
Referenced by MOD_lineart_chain_feature_lines().
|
static |
Definition at line 84 of file lineart_chain.c.
References LineartLineChainItem::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 | ( | LineartRenderBuffer * | rb | ) |
Definition at line 892 of file lineart_chain.c.
References LineartRenderBuffer::chains, LISTBASE_FOREACH, and NULL.
Referenced by MOD_lineart_compute_feature_lines().
| float MOD_lineart_chain_compute_length | ( | LineartLineChain * | rlc | ) |
Length is in image space.
Definition at line 855 of file lineart_chain.c.
References LineartLineChain::chain, copy_v2_v2(), ListBase::first, len_v2v2(), LineartLineChainItem::next, and LineartLineChainItem::pos.
Referenced by MOD_lineart_chain_discard_short().
| void MOD_lineart_chain_connect | ( | LineartRenderBuffer * | rb | ) |
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 775 of file lineart_chain.c.
References BLI_addtail(), BLI_pophead(), BLI_remlink(), LineartLineChain::chain, LineartRenderBuffer::chaining_image_threshold, LineartRenderBuffer::chains, ListBase::first, LineartChainRegisterEntry::is_left, ListBase::last, LineartLineChain::level, lineart_bounding_area_get_end_point(), lineart_chain_connect(), lineart_chain_get_closest_cre(), LineartBoundingArea::linked_chains, LineartLineChain::next, NULL, LineartLineChain::picked, LineartChainRegisterEntry::picked, LineartLineChain::prev, LineartChainRegisterEntry::rlc, swap(), and LineartLineChain::transparency_mask.
Referenced by MOD_lineart_compute_feature_lines().
| int MOD_lineart_chain_count | ( | const LineartLineChain * | rlc | ) |
Definition at line 883 of file lineart_chain.c.
References LineartLineChain::chain, count, and LISTBASE_FOREACH.
Referenced by lineart_gpencil_generate().
| void MOD_lineart_chain_discard_short | ( | LineartRenderBuffer * | rb, |
| const float | threshold | ||
| ) |
Definition at line 872 of file lineart_chain.c.
References BLI_remlink(), LineartRenderBuffer::chains, ListBase::first, MOD_lineart_chain_compute_length(), and LineartLineChain::next.
Referenced by MOD_lineart_compute_feature_lines().
| void MOD_lineart_chain_feature_lines | ( | LineartRenderBuffer * | rb | ) |
Definition at line 166 of file lineart_chain.c.
References LineartLineSegment::at, LineartLineChain::chain, e, LineartVert::fbcoord, ListBase::first, LineartEdge::flags, LineartRenderBuffer::fuzzy_everything, LineartVert::gloc, LineartTriangle::gn, interp_v3_v3v3_db(), ListBase::last, LineartLineChainItem::line_type, lineart_chain_append_point(), lineart_chain_create(), lineart_chain_prepend_point(), lineart_line_get_connected(), LRT_EDGE_FLAG_ALL_TYPE, LRT_EDGE_FLAG_CHAIN_PICKED, LRT_EDGE_FLAG_CONTOUR, LRT_ITER_ALL_LINES_BEGIN, LRT_ITER_ALL_LINES_END, LRT_ITER_ALL_LINES_NEXT, MOD_lineart_get_bounding_area(), N, LineartLineSegment::next, normalize_v3(), LineartLineChain::object_ref, LineartLineSegment::occlusion, LineartLineChainItem::occlusion, POS_TO_FLOAT, LineartLineSegment::prev, LineartEdge::segments, LineartEdge::t1, LineartEdge::t2, LineartLineSegment::transparency_mask, LineartLineChainItem::transparency_mask, LineartLineChain::type, LineartEdge::v1, LineartEdge::v1_obindex, LineartEdge::v2, LineartEdge::v2_obindex, VERT_COORD_TO_FLOAT, and zero_v3().
Referenced by MOD_lineart_compute_feature_lines().
| void MOD_lineart_chain_split_angle | ( | LineartRenderBuffer * | rb, |
| 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 906 of file lineart_chain.c.
References angle(), angle_v2v2v2(), BLI_addtail(), BLI_pophead(), LineartLineChain::chain, LineartRenderBuffer::chains, ListBase::first, LineartLineChainItem::gpos, LineartLineChainItem::index, ListBase::last, LineartLineChain::level, LineartLineChainItem::line_type, lineart_chain_append_point(), lineart_chain_create(), M_PI, LineartLineChain::next, LineartLineChainItem::next, LineartLineChainItem::normal, NULL, LineartLineChain::object_ref, LineartLineChainItem::pos, LineartLineChain::prev, LineartLineChainItem::prev, swap(), LineartLineChain::transparency_mask, LineartLineChainItem::transparency_mask, and LineartLineChain::type.
Referenced by MOD_lineart_compute_feature_lines().
| void MOD_lineart_chain_split_for_fixed_occlusion | ( | LineartRenderBuffer * | rb | ) |
Definition at line 561 of file lineart_chain.c.
References BLI_addtail(), BLI_pophead(), LineartLineChain::chain, LineartRenderBuffer::chains, e, ListBase::first, LineartLineChainItem::gpos, LineartLineChainItem::index, ListBase::last, LineartLineChain::level, LineartLineChainItem::line_type, lineart_bounding_area_link_chain(), lineart_chain_append_point(), lineart_chain_create(), lineart_point_overlapping(), LISTBASE_FOREACH, LineartLineChain::next, LineartLineChainItem::next, LineartLineChainItem::normal, NULL, LineartLineChain::object_ref, LineartLineChainItem::occlusion, LineartLineChainItem::pos, LineartLineChain::prev, LineartLineChainItem::prev, swap(), LineartLineChain::transparency_mask, LineartLineChainItem::transparency_mask, and LineartLineChain::type.
Referenced by MOD_lineart_compute_feature_lines().