mirror of https://codeberg.org/topola/topola.git
feat(layout): center_of_high_level_node (for topological navmesh generation)
This commit is contained in:
parent
2fac10a8d6
commit
3c3c1d9b42
|
|
@ -336,6 +336,37 @@ impl<R: AccessRules> Layout<R> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Checks if a node is "high-level", and if yes, returns its center
|
||||
pub fn center_of_high_level_node(&self, node: NodeIndex) -> Option<Point> {
|
||||
match node {
|
||||
NodeIndex::Primitive(primitive) => {
|
||||
use crate::drawing::{
|
||||
graph::MakePrimitive,
|
||||
primitive::{GetWeight, Primitive},
|
||||
};
|
||||
use crate::geometry::{compound::ManageCompounds, GetSetPos};
|
||||
if self
|
||||
.drawing()
|
||||
.geometry()
|
||||
.compounds(GenericIndex::<()>::new(primitive.petgraph_index()))
|
||||
.next()
|
||||
.is_some()
|
||||
{
|
||||
return None;
|
||||
}
|
||||
match primitive.primitive(self.drawing()) {
|
||||
Primitive::FixedDot(dot) => Some(dot.weight().pos()),
|
||||
// Primitive::LooseDot(dot) => Some(dot.weight().pos()),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
NodeIndex::Compound(cwidx) => {
|
||||
use crate::geometry::shape::AccessShape;
|
||||
Some(self.node_shape(node).center())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn rules(&self) -> &R {
|
||||
self.drawing.rules()
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue