|
Graphviz 16.1.1~dev.20261101.1716
|
#include "config.h"#include <common/boxes.h>#include <common/geomprocs.h>#include <math.h>#include <ortho/partition.h>#include <ortho/trap.h>#include <stdbool.h>#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <util/alloc.h>#include <util/bitarray.h>#include <util/gv_math.h>#include <util/list.h>#include <util/prisize_t.h>#include <util/random.h>Go to the source code of this file.
Data Structures | |
| struct | monchain_t |
| struct | vertex_t |
| struct | vertexchain_t |
Macros | |
| #define | DEBUG 0 |
| #define | NPOINTS 4 /* only rectangles */ |
| #define | TR_FROM_UP 1 /* for traverse-direction */ |
| #define | TR_FROM_DN 2 |
| #define | SP_SIMPLE_LRUP 1 /* for splitting trapezoids */ |
| #define | SP_SIMPLE_LRDN 2 |
| #define | SP_2UP_2DN 3 |
| #define | SP_2UP_LEFT 4 |
| #define | SP_2UP_RIGHT 5 |
| #define | SP_2DN_LEFT 6 |
| #define | SP_2DN_RIGHT 7 |
| #define | SP_NOSPLIT -1 |
| #define | DOT(v0, v1) ((v0).x * (v1).x + (v0).y * (v1).y) |
| #define | CROSS_SINE(v0, v1) ((v0).x * (v1).y - (v1).x * (v0).y) |
| #define | LENGTH(v0) hypot((v0).x, (v0).y) |
| #define | newmon() (++mon_idx) |
| #define | new_chain_element() (++chain_idx) |
Functions | |
| static void | convert (boxf bb, int flip, int ccw, pointf *pts) |
| static size_t | store (segment_t *seg, size_t first, pointf *pts) |
| static void | genSegments (cell *cells, size_t ncells, boxf bb, segment_t *seg, int flip) |
| static size_t * | generateRandomOrdering (size_t n) |
| static bool | inside_polygon (trap_t *t, segment_t *seg) |
| static double | get_angle (pointf vp0, pointf vpnext, pointf vp1) |
| static void | get_vertex_positions (const vertexchain_t *vert, size_t v0, size_t v1, size_t *ip, size_t *iq) |
| static size_t | make_new_monotone_poly (vertexchain_t *vert, monchain_t *chain, size_t mcur, size_t v0, size_t v1) |
| static void | traverse_polygon (vertexchain_t *vert, bitarray_t *visited, boxes_t *decomp, segment_t *seg, traps_t *tr, size_t mcur, size_t trnum, size_t from, int flip, int dir, monchain_t *chain) |
| static void | monotonate_trapezoids (size_t nsegs, segment_t *seg, traps_t *tr, int flip, boxes_t *decomp) |
| static bool | rectIntersect (boxf *d, const boxf r0, const boxf r1) |
| boxes_t | partition (cell *cells, size_t ncells, boxf bb) |
| partitions space around cells (nodes) into rectangular tiles | |
Variables | |
| static size_t | chain_idx |
| static size_t | mon_idx |
| static size_t * | mon |
| #define CROSS_SINE | ( | v0, | |
| v1 | |||
| ) | ((v0).x * (v1).y - (v1).x * (v0).y) |
Definition at line 47 of file partition.c.
| #define DEBUG 0 |
Definition at line 29 of file partition.c.
| #define DOT | ( | v0, | |
| v1 | |||
| ) | ((v0).x * (v1).x + (v0).y * (v1).y) |
Definition at line 46 of file partition.c.
| #define LENGTH | ( | v0 | ) | hypot((v0).x, (v0).y) |
Definition at line 48 of file partition.c.
| #define new_chain_element | ( | ) | (++chain_idx) |
Definition at line 76 of file partition.c.
| #define newmon | ( | ) | (++mon_idx) |
Definition at line 74 of file partition.c.
| #define NPOINTS 4 /* only rectangles */ |
Definition at line 32 of file partition.c.
| #define SP_2DN_LEFT 6 |
Definition at line 42 of file partition.c.
| #define SP_2DN_RIGHT 7 |
Definition at line 43 of file partition.c.
| #define SP_2UP_2DN 3 |
Definition at line 39 of file partition.c.
| #define SP_2UP_LEFT 4 |
Definition at line 40 of file partition.c.
| #define SP_2UP_RIGHT 5 |
Definition at line 41 of file partition.c.
| #define SP_NOSPLIT -1 |
Definition at line 44 of file partition.c.
| #define SP_SIMPLE_LRDN 2 |
Definition at line 38 of file partition.c.
| #define SP_SIMPLE_LRUP 1 /* for splitting trapezoids */ |
Definition at line 37 of file partition.c.
| #define TR_FROM_DN 2 |
Definition at line 35 of file partition.c.
| #define TR_FROM_UP 1 /* for traverse-direction */ |
Definition at line 34 of file partition.c.
Definition at line 78 of file partition.c.
References ccw(), boxf::LL, NPOINTS, perp(), boxf::UR, pointf_s::x, and pointf_s::y.
Referenced by genSegments().
|
static |
Definition at line 134 of file partition.c.
References gv_permutation().
Referenced by partition().
Definition at line 120 of file partition.c.
References convert(), and store().
Referenced by partition().
Definition at line 162 of file partition.c.
References CROSS_SINE, DOT, LENGTH, and sub_pointf().
Referenced by get_vertex_positions().
|
static |
(v0, v1) is the new diagonal to be added to the polygon. Find which chain to use and return the positions of v0 and v1 in p and q
| vert | Chain initial information |
Definition at line 175 of file partition.c.
References get_angle(), LIST_GET, LIST_SIZE, and vertexchain_t::pt.
Referenced by make_new_monotone_poly().
Definition at line 146 of file partition.c.
References trap_t::d0, trap_t::d1, greater_than(), trap_t::is_valid, is_valid_trap(), trap_t::lseg, trap_t::rseg, trap_t::u0, and trap_t::u1.
Referenced by monotonate_trapezoids().
|
static |
Definition at line 220 of file partition.c.
References get_vertex_positions(), LIST_APPEND, LIST_AT, LIST_GET, LIST_IS_EMPTY, mon, new_chain_element, newmon, monchain_t::next, monchain_t::prev, PRISIZE_T, and monchain_t::vnum.
Referenced by traverse_polygon().
|
static |
Definition at line 587 of file partition.c.
References bitarray_new(), bitarray_reset(), chain_idx, free(), gv_calloc(), inside_polygon(), is_valid_trap(), LIST_APPEND, LIST_AT, LIST_FREE, LIST_GET, LIST_SIZE, mon, mon_idx, monchain_t::next, segment_t::next, monchain_t::prev, segment_t::prev, vertexchain_t::pt, TR_FROM_DN, TR_FROM_UP, traverse_polygon(), segment_t::v0, and monchain_t::vnum.
Referenced by partition().
| [in] | cells | rectangular borders of user's input graph's nodes |
| [in] | bb | range of the space to partition |
Definition at line 657 of file partition.c.
References construct_trapezoids(), DEBUG, free(), generateRandomOrdering(), genSegments(), gv_calloc(), LIST_APPEND, LIST_FREE, LIST_GET, LIST_SIZE, monotonate_trapezoids(), PRISIZE_T, rectIntersect(), segment_t::v0, and pointf_s::y.
Referenced by mkMaze().
Definition at line 645 of file partition.c.
References boxf::LL, boxf::UR, pointf_s::x, and pointf_s::y.
Referenced by partition().
Definition at line 100 of file partition.c.
References segment_t::is_inserted, last, segment_t::next, NPOINTS, segment_t::prev, segment_t::v0, and segment_t::v1.
Referenced by genSegments(), update_tree(), and update_tree_store().
|
static |
recursively visit all the trapezoids
| vert | Chain initial information |
| chain | Monotone polygon chain to operate on |
Definition at line 285 of file partition.c.
References bitarray_get(), bitarray_set(), C_EPS, trap_t::d0, trap_t::d1, equal_to(), fp_equal(), trap_t::hi, is_valid_trap(), LIST_APPEND, LIST_AT, LIST_GET, boxf::LL, trap_t::lo, trap_t::lseg, make_new_monotone_poly(), segment_t::next, trap_t::rseg, TR_FROM_DN, TR_FROM_UP, traverse_polygon(), trap_t::u0, trap_t::u1, boxf::UR, segment_t::v0, segment_t::v1, pointf_s::x, and pointf_s::y.
Referenced by monotonate_trapezoids(), and traverse_polygon().
|
static |
Definition at line 67 of file partition.c.
Referenced by monotonate_trapezoids().
|
static |
Definition at line 71 of file partition.c.
Referenced by make_new_monotone_poly(), and monotonate_trapezoids().
|
static |
Definition at line 68 of file partition.c.
Referenced by monotonate_trapezoids().