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::{
|
||||
drawing::seg::{LoneLooseSegIndex, SeqLooseSegIndex},
|
||||
geometry::shape::MeasureLength,
|
||||
graph::MakeRef,
|
||||
};
|
||||
use crate::{geometry::shape::MeasureLength, graph::MakeRef};
|
||||
|
||||
use super::{
|
||||
dot::DotIndex,
|
||||
primitive::{GetJoints, GetOtherJoint},
|
||||
graph::MakePrimitive,
|
||||
loose::{GetNextLoose, LooseIndex},
|
||||
primitive::{GetJoints, GetOtherJoint, MakePrimitiveShape},
|
||||
rules::AccessRules,
|
||||
seg::{LoneLooseSegIndex, SeqLooseSegIndex},
|
||||
Drawing,
|
||||
};
|
||||
|
||||
|
|
@ -42,26 +40,17 @@ impl<'a, CW: Copy, R: AccessRules> MeasureLength for BandRef<'a, CW, R> {
|
|||
BandFirstSegIndex::Straight(seg) => {
|
||||
self.drawing.geometry().seg_shape(seg.into()).length()
|
||||
}
|
||||
BandFirstSegIndex::Bended(start_seg) => {
|
||||
let mut length = self.drawing.geometry().seg_shape(start_seg.into()).length();
|
||||
let start_dot = self.drawing.primitive(start_seg).joints().1;
|
||||
BandFirstSegIndex::Bended(first_loose_seg) => {
|
||||
let mut maybe_loose: Option<LooseIndex> = Some(first_loose_seg.into());
|
||||
let mut prev = None;
|
||||
let mut length = 0.0;
|
||||
|
||||
let bend = self.drawing.primitive(start_dot).bend();
|
||||
length += self.drawing.geometry().bend_shape(bend.into()).length();
|
||||
while let Some(loose) = maybe_loose {
|
||||
length += loose.primitive(self.drawing).shape().length();
|
||||
|
||||
let mut prev_dot = self.drawing.primitive(bend).other_joint(start_dot.into());
|
||||
let mut seg = self.drawing.primitive(prev_dot).seg().unwrap();
|
||||
length += self.drawing.geometry().seg_shape(seg.into()).length();
|
||||
|
||||
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();
|
||||
let prev_prev = prev;
|
||||
prev = maybe_loose;
|
||||
maybe_loose = self.drawing.loose(loose).next_loose(prev_prev);
|
||||
}
|
||||
|
||||
length
|
||||
|
|
|
|||
Loading…
Reference in New Issue