Graphviz 13.0.0~dev.20250607.1528
Loading...
Searching...
No Matches
spring_electrical.h
Go to the documentation of this file.
1/*************************************************************************
2 * Copyright (c) 2011 AT&T Intellectual Property
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * https://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors: Details at https://graphviz.org
9 *************************************************************************/
10
11#pragma once
12
13#include <sparse/SparseMatrix.h>
14#include <stdbool.h>
15
17
18/* a flag to indicate that p should be set auto */
19#define AUTOP -1.0001234
20
22
23enum {QUAD_TREE_HYBRID_SIZE = 10000};
24
26
27typedef struct {
28 double p;/*a negativve real number default to -1. repulsive force = dist^p */
29 double K;/* the natural distance. If K < 0, K will be set to the average distance of an edge */
30 int multilevels;/* if <=1, single level */
31 int max_qtree_level;/* max level of quadtree */
33 double step;/* initial step size */
35 bool random_start : 1;
41 int tscheme; /* octree scheme. 0 (no octree), 1 (normal), 2 (fast) */
42 double initial_scaling;/* how to scale the layout of the graph before passing to overlap removal algorithm.
43 positive values are absolute in points, negative values are relative
44 to average label size.
45 */
46 double rotation;/* degree of rotation */
47 int edge_labeling_scheme; /* specifying whether to treat node of the form |edgelabel|* as a special node representing an edge label.
48 0 (no action, default), 1 (penalty based method to make that kind of node close to the center of its neighbor),
49 1 (penalty based method to make that kind of node close to the old center of its neighbor),
50 3 (two step process of overlap removal and straightening) */
52
55
57 spring_electrical_control *ctrl, double *x,
58 int *flag);
61 double *x, int *flag);
62
65 double *label_sizes, double *x,
66 int n_edge_label_nodes,
67 int *edge_label_nodes, int *flag);
68
69double average_edge_length(SparseMatrix A, int dim, double *coord);
70
73 double *x, int *flag);
74
75void pcp_rotate(int n, int dim, double *x);
#define A(n, t)
Definition expr.h:76
#define D
Definition hierarchy.c:120
static const int dim
pointf coord(node_t *n)
Definition utils.c:152
void spring_electrical_embedding(int dim, SparseMatrix A0, spring_electrical_control *ctrl, double *x, int *flag)
void spring_electrical_embedding_fast(int dim, SparseMatrix A0, spring_electrical_control *ctrl, double *x, int *flag)
@ SMOOTHING_NONE
@ SMOOTHING_SPRING
@ SMOOTHING_RNG
@ SMOOTHING_STRESS_MAJORIZATION_GRAPH_DIST
@ SMOOTHING_STRESS_MAJORIZATION_POWER_DIST
@ SMOOTHING_TRIANGLE
@ SMOOTHING_STRESS_MAJORIZATION_AVG_DIST
@ QUAD_TREE_NORMAL
@ QUAD_TREE_FAST
@ QUAD_TREE_HYBRID
@ QUAD_TREE_NONE
void spring_electrical_control_print(spring_electrical_control ctrl)
void multilevel_spring_electrical_embedding(int dim, SparseMatrix A0, spring_electrical_control *ctrl, double *label_sizes, double *x, int n_edge_label_nodes, int *edge_label_nodes, int *flag)
spring_electrical_control spring_electrical_control_new(void)
void spring_electrical_spring_embedding(int dim, SparseMatrix A, SparseMatrix D, spring_electrical_control *ctrl, double *x, int *flag)
@ ERROR_NOT_SQUARE_MATRIX
double average_edge_length(SparseMatrix A, int dim, double *coord)
@ QUAD_TREE_HYBRID_SIZE
void pcp_rotate(int n, int dim, double *x)
bool random_start
whether to apply SE from a random layout, or from exisiting layout