Попытки в стрелочки х2 неудачные, но чуть боле удачные

This commit is contained in:
Морозов Андрей 2021-11-06 02:20:18 +04:00
parent 5653628cfe
commit 9ff6dd2745
3 changed files with 62 additions and 25 deletions

View File

@ -76,15 +76,30 @@ class CurvePainter extends CustomPainter {
return Graphs.fromList("1", d, false, false);
}
Map<int, Offset> getDotPos(int dotsAm, Size size) {
int getHighConnections() {
int higest = -1;
gr.getDots().forEach((element) {
if (element.getL().length > higest) {
higest = element.num;
}
});
return higest;
}
Map<int, Offset> getDotPos(int dotsAm, Size size, int exclude) {
dotsAm--;
Map<int, Offset> off = <int, Offset>{};
var width = size.width / 2;
var height = size.height / 2;
int add = 1;
for (int i = 0; i < dotsAm; i++) {
double x = cos(2 * pi * i / dotsAm) * circleRad + width;
double y = sin(2 * pi * i / dotsAm) * circleRad + height;
off[i + 1] = Offset(x, y);
if (i == exclude - 1) add++;
off[i + add] = Offset(x, y);
}
//print(off);
return off;
}
@ -101,11 +116,14 @@ class CurvePainter extends CustomPainter {
..strokeJoin = StrokeJoin.round
..strokeWidth = width - 1;
var length = sqrt((to.dx - from.dx) * (to.dx - from.dx) +
(to.dy - from.dy) * (to.dy - from.dy));
/// Draw a single arrow.
path = Path();
path.moveTo(from.dx, from.dy);
path.relativeCubicTo(
0, 0, size.width / 20, 50, to.dx - from.dx, to.dy - from.dy);
path.relativeCubicTo(0, 0, -(from.dx + to.dx) / length - 40,
-(from.dy + to.dy) / length - 40, to.dx - from.dx, to.dy - from.dy);
path =
ArrowPath.make(path: path, isDoubleSided: doubleSided, tipLength: 13);
canvas.drawPath(path, paint);
@ -123,11 +141,14 @@ class CurvePainter extends CustomPainter {
..strokeJoin = StrokeJoin.round
..strokeWidth = width - 1;
var length = sqrt((to.dx - from.dx) * (to.dx - from.dx) +
(to.dy - from.dy) * (to.dy - from.dy));
/// Draw a single arrow.
path = Path();
path.moveTo(from.dx, from.dy);
path.relativeCubicTo(
0, 0, -size.width / 25, -50, to.dx - from.dx, to.dy - from.dy);
path.relativeCubicTo(0, 0, (from.dx + to.dx) / length + 60,
(from.dy + to.dy) / length + 0, to.dx - from.dx, to.dy - from.dy);
path = ArrowPath.make(
path: path,
isDoubleSided: doubleSided,
@ -151,8 +172,8 @@ class CurvePainter extends CustomPainter {
if (gr.getUseLengthBool()) {
drawDotNames(
canvas,
Offset((off[d]!.dx + beg.dx) / 2 - 20,
(off[d]!.dy + beg.dy) / 2 - 20),
Offset((off[d]!.dx + beg.dx) / 2 - 18,
(off[d]!.dy + beg.dy) / 2 - 18),
i.getL()[d].toString());
}
} else {
@ -160,8 +181,8 @@ class CurvePainter extends CustomPainter {
if (gr.getUseLengthBool()) {
drawDotNames(
canvas,
Offset((off[d]!.dx + beg.dx) / 2 + 25,
(off[d]!.dy + beg.dy) / 2 + 25),
Offset((off[d]!.dx + beg.dx) / 2 + 30,
(off[d]!.dy + beg.dy) / 2 + 30),
i.getL()[d].toString());
}
}
@ -191,10 +212,14 @@ class CurvePainter extends CustomPainter {
//Offset(size.width, size.height / 2));
//gr = getGraph();
var off = getDotPos(gr.getDotAmount(), size);
int higest = getHighConnections();
if (higest > -1) {
var off = getDotPos(gr.getDotAmount(), size, higest);
off[higest] = Offset(size.width / 2, size.height / 2);
for (int i in off.keys) {
drawDot(canvas, off[i]!);
drawDotNames(canvas, off[i]!, "${gr.getDots()[i - 1].getName()}:[${i}]");
drawDotNames(
canvas, off[i]!, "${gr.getDots()[i - 1].getName()}:[${i}]");
}
//var g = gr.getNoRepeatDots();
//print(g);
@ -204,6 +229,7 @@ class CurvePainter extends CustomPainter {
//drawArrow(canvas, Offset(size.width / 2, size.height / 2),
// Offset(size.width / 2 + 50, size.height / 2 + 200));
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
@ -273,9 +299,9 @@ void pringArr(Canvas canvas, Size size) {
/// Use complex path.
path = Path();
path.moveTo(size.width * 0.25, size.height * 0.3);
path.relativeCubicTo(0, 0, size.width * 0.25, 50, size.width * 0.5, 50);
path.relativeCubicTo(0, 0, -size.width * 0.25, 0, -size.width * 0.5, 50);
path.relativeCubicTo(0, 0, size.width * 0.125, 10, size.width * 0.25, -10);
path.relativeCubicTo(0, 0, size.width * 0.25, 0, size.width * 0.5, 50);
path.relativeCubicTo(0, 0, -size.width * 0.25, 50, -size.width * 0.5, 50);
//path.relativeCubicTo(0, 0, size.width * 0.125, 10, size.width * 0.25, -10);
path = ArrowPath.make(path: path, isDoubleSided: true);
canvas.drawPath(path, paint..color = Colors.blue);

View File

@ -11,7 +11,7 @@ Graphs getGraph() {
d.add(Dot.fromTwoLists("3", [1, 2], [1, 2]));
d.add(Dot.fromTwoLists("Name1", [], []));
d.add(Dot.fromTwoLists("Name2", [], []));
return Graphs.fromList("1", d, true, false);
return Graphs.fromList("1", d, true, true);
}
class DrawingPage extends StatefulWidget {

11
flutter/outTest.txt Normal file
View File

@ -0,0 +1,11 @@
1
Ориентированный
Взвешенный
1: 2|5 5|4
2:
3: 5|4
4: 6|5
5: 2|4
6: 5|4 2|5 1|5
7: 2|5
END