mirror of https://codeberg.org/topola/topola.git
fix(drawing/drawing): Don't infringe upon wraparound limbs and its fillets' limbs
Sadly, this degrades performance considerably. But we will improve it later.
This commit is contained in:
parent
c2cd565a9b
commit
eb0ee25565
|
|
@ -771,7 +771,20 @@ impl<CW: Clone, Cel: Copy, R: AccessRules> Drawing<CW, Cel, R> {
|
||||||
let to = self.add_dot_infringably(recorder, dot_weight);
|
let to = self.add_dot_infringably(recorder, dot_weight);
|
||||||
|
|
||||||
let seg = self
|
let seg = self
|
||||||
.add_seg(recorder, from, seg_to.into(), seg_weight, filter)
|
.add_seg(
|
||||||
|
recorder,
|
||||||
|
from,
|
||||||
|
seg_to.into(),
|
||||||
|
seg_weight,
|
||||||
|
&|drawing, infringer, infringee| {
|
||||||
|
filter(drawing, infringer, infringee)
|
||||||
|
// Don't infringe upon limbs of the current wraparound.
|
||||||
|
&& !PrimitiveIndex::from(around)
|
||||||
|
.primitive(drawing)
|
||||||
|
.limbs()
|
||||||
|
.contains(&infringee)
|
||||||
|
},
|
||||||
|
)
|
||||||
.inspect_err(|_| {
|
.inspect_err(|_| {
|
||||||
self.recording_geometry_with_rtree
|
self.recording_geometry_with_rtree
|
||||||
.remove_dot(recorder, to.into());
|
.remove_dot(recorder, to.into());
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ use crate::{
|
||||||
},
|
},
|
||||||
gear::GearIndex,
|
gear::GearIndex,
|
||||||
graph::{GetMaybeNet, IsInLayer, MakePrimitive, PrimitiveIndex, PrimitiveWeight},
|
graph::{GetMaybeNet, IsInLayer, MakePrimitive, PrimitiveIndex, PrimitiveWeight},
|
||||||
primitive::MakePrimitiveShape,
|
primitive::{GetLimbs, MakePrimitiveShape},
|
||||||
rules::AccessRules,
|
rules::AccessRules,
|
||||||
seg::{
|
seg::{
|
||||||
FixedSegIndex, FixedSegWeight, LoneLooseSegIndex, LoneLooseSegWeight, SegIndex,
|
FixedSegIndex, FixedSegWeight, LoneLooseSegIndex, LoneLooseSegWeight, SegIndex,
|
||||||
|
|
@ -92,7 +92,18 @@ impl<R: AccessRules> Layout<R> {
|
||||||
seg_weight,
|
seg_weight,
|
||||||
bend_weight,
|
bend_weight,
|
||||||
sense,
|
sense,
|
||||||
&|_drawing, _infringer, _infringee| true,
|
&|drawing, _infringer, infringee| {
|
||||||
|
// Don't infringe upon limbs of wraparound's filleteds.
|
||||||
|
!drawing
|
||||||
|
.overlapees(around.into())
|
||||||
|
.find(|overlapee| {
|
||||||
|
PrimitiveIndex::from(overlapee.1)
|
||||||
|
.primitive(drawing)
|
||||||
|
.limbs()
|
||||||
|
.contains(&infringee)
|
||||||
|
})
|
||||||
|
.is_some()
|
||||||
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue