@figtreejs/core 0.0.1-beta.0 → 0.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,3 @@
1
- // export function layout (tree:ImmutableTree,node?:NodeRef):Map<NodeRef,FunctionalVertex>{
2
-
3
1
  import type { ImmutableTree, NodeRef } from "../../evo";
4
2
  import { preOrderIterator, tipIterator } from "../../evo";
5
3
  import type { NodeLabelType } from "../types";
@@ -18,6 +16,13 @@ type data = {
18
16
  number: number;
19
17
  };
20
18
 
19
+ /**
20
+ * The radial (unrooted) layout
21
+ * @param tree
22
+ * @param options {spread: number} - increases this increases the space between tips
23
+ * @returns (node)=>FunctionalVertex
24
+ */
25
+
21
26
  export function radialLayout(
22
27
  tree: ImmutableTree,
23
28
  options: { spread?: number } = {},
@@ -59,21 +64,20 @@ export function radialLayout(
59
64
  dx = Math.cos(branchAngle);
60
65
  dy = Math.sin(branchAngle);
61
66
  }
67
+
68
+ const nTheta = normalizeAngle(branchAngle);
62
69
  const vertex = {
63
70
  x,
64
71
  y,
65
72
  layoutClass: layoutClass.Radial,
66
- theta: branchAngle,
73
+ theta: nTheta,
67
74
  nodeLabel: {
68
75
  dxFactor: dx,
69
76
  dyFactor: dy,
70
77
  alignmentBaseline: "middle",
71
78
  textAnchor:
72
- normalizeAngle(branchAngle) > Math.PI / 2 &&
73
- normalizeAngle(branchAngle) < (3 * Math.PI) / 2
74
- ? "end"
75
- : "start",
76
- rotation: 0, // textSafeDegrees(normalizeAngle(branchAngle))
79
+ nTheta > Math.PI / 2 && nTheta < (3 * Math.PI) / 2 ? "end" : " start",
80
+ rotation: textSafeDegrees(nTheta) * 2, // why is this magic 2 needed?
77
81
  } as NodeLabelType,
78
82
  };
79
83
 
@@ -130,9 +134,9 @@ export function textSafeDegrees(radians: number) {
130
134
  //trial and error - must be a better way
131
135
  if (d > 90 && d < 270) {
132
136
  return (d - 180) / 2;
133
- } else if (d > 0 && d < 88) {
137
+ } else if (d > 0 && d < 90) {
134
138
  return d / 2;
135
- } else if (d < 360 && d > 272) {
139
+ } else if (d < 360 && d > 270) {
136
140
  return (360 + d) / 2;
137
141
  } else {
138
142
  return d;
@@ -5,6 +5,13 @@ import type { NodeLabelType, FunctionalVertex } from "../types";
5
5
  import { layoutClass } from "../types";
6
6
  import { unNullify } from "../../utils/maybe";
7
7
 
8
+ /**
9
+ * This is the base class for layouts that place the parent nodes at the mean of their children.
10
+ * It forms the basis of the polar and rectangular layouts.
11
+ * The difference between the two is handled by the scaling functions.
12
+ * @param lc - layoutClass rectangular / polar
13
+ * @returns
14
+ */
8
15
  export function baseLayout(lc: layoutClass) {
9
16
  function layout(tree: ImmutableTree): (node: NodeRef) => FunctionalVertex {
10
17
  const map = new Map<NodeRef, FunctionalVertex>();
@@ -1,76 +1,3 @@
1
- import type { layoutOptions } from "../components/figtree/figtree-types";
2
- //TODO make tree
3
-
4
- // TODO caching
5
-
6
- //
7
- export interface Label {
8
- x: number;
9
- y: number;
10
- alignmentBaseline: string;
11
- textAnchor: string;
12
- rotation: number;
13
- alignedPos?: { x: number; y: number };
14
- }
15
- export interface Vertex {
16
- number: number;
17
- x: number;
18
- y: number;
19
- hidden: boolean | undefined;
20
- labelHidden: boolean | undefined;
21
- level: number;
22
- branch?: {
23
- d: string;
24
- label: Label;
25
- };
26
- theta?: number; //angle
27
- r?: number; //radius
28
- nodeLabel: Label;
29
- }
30
-
31
- export interface ArbitraryVertex {
32
- hidden: boolean;
33
- labelHidden: boolean;
34
- number: number;
35
- x: number;
36
- y: number;
37
- level: number;
38
- theta?: number; //angle
39
- pathPoints: { x: number; y: number }[];
40
- nodeLabel: {
41
- dx: number;
42
- dy: number;
43
- alignmentBaseline: string;
44
- textAnchor: string;
45
- rotation?: number;
46
- };
47
- }
48
-
49
- //ids match node ids
50
- export interface Vertices {
51
- type: "Rectangular" | "Polar" | "Radial";
52
- vertices: Vertex[];
53
- origin?: { x: number; y: number }; // used by polar layout to denote the position of the root (or stem) which can change
54
- theta?: [number, number]; // used by polar layout to denote the range of angles
55
- axisLength?: number; // provided by layouts that support axis
56
- }
57
-
58
- export interface ArbitraryVertices {
59
- vertices: ArbitraryVertex[];
60
- extent: { x: [number, number]; y: [number, number] };
61
- }
62
-
63
- export interface internalLayoutOptions extends layoutOptions {
64
- // all layout options plus width and height of drawable area
65
- width?: number;
66
- height?: number;
67
- }
68
-
69
- export interface CartoonData {
70
- cartooned: boolean;
71
- collapseFactor: number;
72
- }
73
-
74
1
  export const defaultInternalLayoutOptions = {
75
2
  width: 1000,
76
3
  height: 1000,
@@ -671,7 +671,7 @@ exports[`Node labels > renders a tree node labels in radial layout 1`] = `
671
671
  <text
672
672
  alignment-baseline="middle"
673
673
  text-anchor="end"
674
- transform="translate(148.99984767296695,89.72852388058958) rotate(0)"
674
+ transform="translate(148.99984767296695,89.72852388058958) rotate(59.99999999999997)"
675
675
  >
676
676
  Label!
677
677
  </text>
@@ -685,8 +685,8 @@ exports[`Node labels > renders a tree node labels in radial layout 1`] = `
685
685
  <g>
686
686
  <text
687
687
  alignment-baseline="middle"
688
- text-anchor="start"
689
- transform="translate(231.24985501012264,-5.190660633322136) rotate(0)"
688
+ text-anchor=" start"
689
+ transform="translate(231.24985501012264,-5.190660633322136) rotate(660.1047197551197)"
690
690
  >
691
691
  Label!
692
692
  </text>
@@ -701,7 +701,7 @@ exports[`Node labels > renders a tree node labels in radial layout 1`] = `
701
701
  <text
702
702
  alignment-baseline="middle"
703
703
  text-anchor="end"
704
- transform="translate(-5.999989978491366,95.13618828386687) rotate(0)"
704
+ transform="translate(-5.999989978491366,95.13618828386687) rotate(-0.10471975511964615)"
705
705
  >
706
706
  Label!
707
707
  </text>
@@ -715,8 +715,8 @@ exports[`Node labels > renders a tree node labels in radial layout 1`] = `
715
715
  <g>
716
716
  <text
717
717
  alignment-baseline="middle"
718
- text-anchor="start"
719
- transform="translate(383,385.19615242270663) rotate(0)"
718
+ text-anchor=" start"
719
+ transform="translate(383,385.19615242270663) rotate(59.99999999999999)"
720
720
  >
721
721
  Label!
722
722
  </text>
@@ -794,7 +794,7 @@ exports[`Node labels > renders a tree node labels in radial layout 1`] = `
794
794
  <text
795
795
  alignment-baseline="middle"
796
796
  text-anchor="end"
797
- transform="translate(148.99984767296695,89.72852388058958) rotate(0)"
797
+ transform="translate(148.99984767296695,89.72852388058958) rotate(59.99999999999997)"
798
798
  >
799
799
  Label!
800
800
  </text>
@@ -808,8 +808,8 @@ exports[`Node labels > renders a tree node labels in radial layout 1`] = `
808
808
  <g>
809
809
  <text
810
810
  alignment-baseline="middle"
811
- text-anchor="start"
812
- transform="translate(231.24985501012264,-5.190660633322136) rotate(0)"
811
+ text-anchor=" start"
812
+ transform="translate(231.24985501012264,-5.190660633322136) rotate(660.1047197551197)"
813
813
  >
814
814
  Label!
815
815
  </text>
@@ -824,7 +824,7 @@ exports[`Node labels > renders a tree node labels in radial layout 1`] = `
824
824
  <text
825
825
  alignment-baseline="middle"
826
826
  text-anchor="end"
827
- transform="translate(-5.999989978491366,95.13618828386687) rotate(0)"
827
+ transform="translate(-5.999989978491366,95.13618828386687) rotate(-0.10471975511964615)"
828
828
  >
829
829
  Label!
830
830
  </text>
@@ -838,8 +838,8 @@ exports[`Node labels > renders a tree node labels in radial layout 1`] = `
838
838
  <g>
839
839
  <text
840
840
  alignment-baseline="middle"
841
- text-anchor="start"
842
- transform="translate(383,385.19615242270663) rotate(0)"
841
+ text-anchor=" start"
842
+ transform="translate(383,385.19615242270663) rotate(59.99999999999999)"
843
843
  >
844
844
  Label!
845
845
  </text>