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 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(|_| {
|
||||
self.recording_geometry_with_rtree
|
||||
.remove_dot(recorder, to.into());
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ use crate::{
|
|||
},
|
||||
gear::GearIndex,
|
||||
graph::{GetMaybeNet, IsInLayer, MakePrimitive, PrimitiveIndex, PrimitiveWeight},
|
||||
primitive::MakePrimitiveShape,
|
||||
primitive::{GetLimbs, MakePrimitiveShape},
|
||||
rules::AccessRules,
|
||||
seg::{
|
||||
FixedSegIndex, FixedSegWeight, LoneLooseSegIndex, LoneLooseSegWeight, SegIndex,
|
||||
|
|
@ -92,7 +92,18 @@ impl<R: AccessRules> Layout<R> {
|
|||
seg_weight,
|
||||
bend_weight,
|
||||
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