draw: Clean up some commented-out code and make types narrower

This commit is contained in:
Mikolaj Wielgus 2023-11-15 01:07:11 +00:00
parent 334cb51073
commit 60c494a171
1 changed files with 16 additions and 46 deletions

View File

@ -61,20 +61,9 @@ impl<'a> Draw<'a> {
} }
pub fn start(&mut self, from: LooseDotIndex) -> Head { pub fn start(&mut self, from: LooseDotIndex) -> Head {
self.head(from.into()) self.segbend_head(from).into()
} }
/*#[debug_ensures(ret.is_ok() -> self.layout.node_count() == old(self.layout.node_count() + 1))]
#[debug_ensures(ret.is_err() -> self.layout.node_count() == old(self.layout.node_count()))]
pub fn finish(&mut self, head: Head, into: LooseDotIndex, width: f64) -> Result<(), ()> {
if let Some(bend) = self.layout.primitive(into).bend() {
self.finish_in_bend(head, bend, into, width)?;
} else {
self.finish_in_dot(head, into.into(), width)?;
}
Ok(())
}*/
#[debug_ensures(ret.is_ok() -> self.layout.node_count() == old(self.layout.node_count() + 1))] #[debug_ensures(ret.is_ok() -> self.layout.node_count() == old(self.layout.node_count() + 1))]
#[debug_ensures(ret.is_err() -> self.layout.node_count() == old(self.layout.node_count()))] #[debug_ensures(ret.is_err() -> self.layout.node_count() == old(self.layout.node_count()))]
pub fn finish_in_dot(&mut self, head: Head, into: FixedDotIndex, width: f64) -> Result<(), ()> { pub fn finish_in_dot(&mut self, head: Head, into: FixedDotIndex, width: f64) -> Result<(), ()> {
@ -107,8 +96,11 @@ impl<'a> Draw<'a> {
into: LooseDotIndex, into: LooseDotIndex,
width: f64, width: f64,
) -> Result<(), ()> { ) -> Result<(), ()> {
let to_head = self.head(into.into()); let to_head = self.segbend_head(into);
let to_cw = self.guide(&Default::default()).head_cw(&to_head).unwrap(); let to_cw = self
.guide(&Default::default())
.head_cw(&to_head.into())
.unwrap();
let tangent = self.guide(&Default::default()).head_around_bend_segment( let tangent = self.guide(&Default::default()).head_around_bend_segment(
&head, &head,
into_bend.into(), into_bend.into(),
@ -117,7 +109,7 @@ impl<'a> Draw<'a> {
)?; )?;
let head = self.extend_head(head, tangent.start_point())?; let head = self.extend_head(head, tangent.start_point())?;
let _to_head = self.extend_head(to_head, tangent.end_point())?; let _to_head = self.extend_head(to_head.into(), tangent.end_point())?;
let net = head.dot().primitive(&self.layout.graph).net(); let net = head.dot().primitive(&self.layout.graph).net();
self.layout self.layout
@ -216,34 +208,9 @@ impl<'a> Draw<'a> {
fn extend_head(&mut self, head: Head, to: Point) -> Result<Head, ()> { fn extend_head(&mut self, head: Head, to: Point) -> Result<Head, ()> {
if let Head::Segbend(head) = head { if let Head::Segbend(head) = head {
self.layout.move_dot(head.dot, to)?; self.layout.move_dot(head.dot, to)?;
/*if let TaggedIndex::Dot(around) = self.layout.primitive(head.segbend.bend).around() {
let cw = self.layout.primitive(head.segbend.bend).weight().cw;
let prev_dot = self.layout.primitive(head.segbend.ends().0).prev().unwrap();
let prev_head = self.prev_head(prev_dot);
let alternate_tangent = self
.guide(&Default::default())
.head_around_dot_segment(&prev_head, around, cw, 5.0)?;
let segbend_dot_pos = self.layout.primitive(head.segbend.dot).weight().circle.pos;
if alternate_tangent.end_point().euclidean_distance(&to)
< segbend_dot_pos.euclidean_distance(&to)
{
self.layout.flip_bend(head.segbend.bend);
self.layout
.move_dot(head.segbend.dot, alternate_tangent.end_point())?;
}
}*/
Ok(Head::Segbend(head)) Ok(Head::Segbend(head))
} else { } else {
Ok(head) Ok(head)
// No assertion for now because we temporarily use floats.
//println!("{:?} {:?}", self.layout.weight(TaggedIndex::Dot(from)).as_dot().unwrap().circle.pos, to);
//assert!(self.layout.weight(TaggedIndex::Dot(from)).as_dot().unwrap().circle.pos == to);
} }
} }
@ -288,17 +255,20 @@ impl<'a> Draw<'a> {
self.layout.remove_interior(&head.segbend); self.layout.remove_interior(&head.segbend);
self.layout.remove(head.dot().into()); self.layout.remove(head.dot().into());
Some(self.head(prev_dot.into())) Some(self.head(prev_dot))
} }
fn head(&self, dot: DotIndex) -> Head { fn head(&self, dot: DotIndex) -> Head {
match dot { match dot {
DotIndex::Fixed(loose) => BareHead { dot: loose }.into(), DotIndex::Fixed(loose) => BareHead { dot: loose }.into(),
DotIndex::Loose(fixed) => SegbendHead { DotIndex::Loose(fixed) => self.segbend_head(fixed).into(),
dot: fixed, }
segbend: self.layout.segbend(fixed), }
}
.into(), fn segbend_head(&self, dot: LooseDotIndex) -> SegbendHead {
SegbendHead {
dot,
segbend: self.layout.segbend(dot),
} }
} }