Graphviz 13.0.0~dev.20241220.2304
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
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) */
51};
52
54
57
58void spring_electrical_embedding(int dim, SparseMatrix A0, spring_electrical_control ctrl, double *x, int *flag);
59void spring_electrical_embedding_fast(int dim, SparseMatrix A0, spring_electrical_control ctrl, double *x, int *flag);
60
63 double *label_sizes, double *x,
64 int n_edge_label_nodes,
65 int *edge_label_nodes, int *flag);
66
68
69double average_edge_length(SparseMatrix A, int dim, double *coord);
70
72
73void pcp_rotate(int n, int dim, double *x);
#define A(n, t)
Definition expr.h:76
#define D
Definition hierarchy.c:119
static const int dim
pointf coord(node_t *n)
Definition utils.c:150
@ ERROR_NOT_SQUARE_MATRIX
@ QUAD_TREE_NORMAL
@ QUAD_TREE_FAST
@ QUAD_TREE_HYBRID
@ QUAD_TREE_NONE
@ QUAD_TREE_HYBRID_SIZE
void spring_electrical_control_print(spring_electrical_control ctrl)
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)
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
double average_edge_length(SparseMatrix A, int dim, double *coord)
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)
void spring_electrical_control_delete(spring_electrical_control ctrl)
struct spring_electrical_control_struct * spring_electrical_control
void pcp_rotate(int n, int dim, double *x)
void spring_electrical_embedding(int dim, SparseMatrix A0, spring_electrical_control ctrl, double *x, int *flag)
bool random_start
whether to apply SE from a random layout, or from exisiting layout