mirror of https://codeberg.org/topola/topola.git
drawing: use shared band traversal code
This commit is contained in:
parent
61babd179a
commit
95c1c0b8b9
|
|
@ -1,13 +1,11 @@
|
||||||
use crate::{
|
use crate::{geometry::shape::MeasureLength, graph::MakeRef};
|
||||||
drawing::seg::{LoneLooseSegIndex, SeqLooseSegIndex},
|
|
||||||
geometry::shape::MeasureLength,
|
|
||||||
graph::MakeRef,
|
|
||||||
};
|
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
dot::DotIndex,
|
graph::MakePrimitive,
|
||||||
primitive::{GetJoints, GetOtherJoint},
|
loose::{GetNextLoose, LooseIndex},
|
||||||
|
primitive::{GetJoints, GetOtherJoint, MakePrimitiveShape},
|
||||||
rules::AccessRules,
|
rules::AccessRules,
|
||||||
|
seg::{LoneLooseSegIndex, SeqLooseSegIndex},
|
||||||
Drawing,
|
Drawing,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -42,26 +40,17 @@ impl<'a, CW: Copy, R: AccessRules> MeasureLength for BandRef<'a, CW, R> {
|
||||||
BandFirstSegIndex::Straight(seg) => {
|
BandFirstSegIndex::Straight(seg) => {
|
||||||
self.drawing.geometry().seg_shape(seg.into()).length()
|
self.drawing.geometry().seg_shape(seg.into()).length()
|
||||||
}
|
}
|
||||||
BandFirstSegIndex::Bended(start_seg) => {
|
BandFirstSegIndex::Bended(first_loose_seg) => {
|
||||||
let mut length = self.drawing.geometry().seg_shape(start_seg.into()).length();
|
let mut maybe_loose: Option<LooseIndex> = Some(first_loose_seg.into());
|
||||||
let start_dot = self.drawing.primitive(start_seg).joints().1;
|
let mut prev = None;
|
||||||
|
let mut length = 0.0;
|
||||||
|
|
||||||
let bend = self.drawing.primitive(start_dot).bend();
|
while let Some(loose) = maybe_loose {
|
||||||
length += self.drawing.geometry().bend_shape(bend.into()).length();
|
length += loose.primitive(self.drawing).shape().length();
|
||||||
|
|
||||||
let mut prev_dot = self.drawing.primitive(bend).other_joint(start_dot.into());
|
let prev_prev = prev;
|
||||||
let mut seg = self.drawing.primitive(prev_dot).seg().unwrap();
|
prev = maybe_loose;
|
||||||
length += self.drawing.geometry().seg_shape(seg.into()).length();
|
maybe_loose = self.drawing.loose(loose).next_loose(prev_prev);
|
||||||
|
|
||||||
while let DotIndex::Loose(dot) =
|
|
||||||
self.drawing.primitive(seg).other_joint(prev_dot.into())
|
|
||||||
{
|
|
||||||
let bend = self.drawing.primitive(dot).bend();
|
|
||||||
length += self.drawing.geometry().bend_shape(bend.into()).length();
|
|
||||||
|
|
||||||
prev_dot = self.drawing.primitive(bend).other_joint(dot);
|
|
||||||
seg = self.drawing.primitive(prev_dot).seg().unwrap();
|
|
||||||
length += self.drawing.geometry().seg_shape(seg.into()).length();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
length
|
length
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue