forked from StrafesNET/strafe-client
vert_faces
This commit is contained in:
parent
756648c2fb
commit
717cf2290d
@ -35,7 +35,7 @@ struct EdgeRefs{
|
||||
verts:[VertId;2],//bottom, top
|
||||
}
|
||||
struct VertRefs{
|
||||
//faces:Vec<FaceId>,
|
||||
faces:Vec<FaceId>,
|
||||
edges:Vec<EdgeId>,
|
||||
}
|
||||
pub struct PhysicsMesh{
|
||||
@ -49,6 +49,7 @@ pub struct PhysicsMesh{
|
||||
#[derive(Default,Clone)]
|
||||
struct VertRefGuy{
|
||||
edges:std::collections::HashSet<EdgeId>,
|
||||
faces:std::collections::HashSet<FaceId>,
|
||||
}
|
||||
#[derive(Clone,Hash,Eq,PartialEq)]
|
||||
struct EdgeIdGuy([VertId;2]);
|
||||
@ -120,9 +121,13 @@ impl From<&crate::model::IndexedModel> for PhysicsMesh{
|
||||
}else{
|
||||
edge_ref_guy.push(0,face_id);
|
||||
}
|
||||
//index edge into vertices
|
||||
unsafe{vert_edges.get_unchecked_mut(vert0_id)}.edges.insert(edge_id);
|
||||
unsafe{vert_edges.get_unchecked_mut(vert1_id)}.edges.insert(edge_id);
|
||||
//index edges & face into vertices
|
||||
{
|
||||
let vert_ref_guy=unsafe{vert_edges.get_unchecked_mut(vert0_id)};
|
||||
vert_ref_guy.edges.insert(edge_id);
|
||||
vert_ref_guy.faces.insert(face_id);
|
||||
unsafe{vert_edges.get_unchecked_mut(vert1_id)}.edges.insert(edge_id);
|
||||
}
|
||||
//return edge_id
|
||||
edge_id
|
||||
}).collect();
|
||||
@ -158,7 +163,10 @@ impl From<&crate::model::IndexedModel> for PhysicsMesh{
|
||||
EdgeRefs{faces:edge_ref_guy.0,verts:edge_id_guy.0}
|
||||
).collect(),
|
||||
vert_topology:vert_edges.into_iter().map(|vert_ref_guy|
|
||||
VertRefs{edges:vert_ref_guy.edges.into_iter().collect()}
|
||||
VertRefs{
|
||||
edges:vert_ref_guy.edges.into_iter().collect(),
|
||||
faces:vert_ref_guy.faces.into_iter().collect(),
|
||||
}
|
||||
).collect(),
|
||||
}
|
||||
}
|
||||
@ -176,6 +184,7 @@ pub trait MeshQuery<FACE:Clone,EDGE:Clone,VERT:Clone>{
|
||||
fn edge_faces(&self,edge_id:EDGE)->Cow<[FACE;2]>;
|
||||
fn edge_verts(&self,edge_id:EDGE)->Cow<[VERT;2]>;
|
||||
fn vert_edges(&self,vert_id:VERT)->Cow<Vec<EDGE>>;
|
||||
fn vert_faces(&self,vert_id:VERT)->Cow<Vec<FACE>>;
|
||||
}
|
||||
impl PhysicsMesh{
|
||||
pub fn verts<'a>(&'a self)->impl Iterator<Item=Planar64Vec3>+'a{
|
||||
@ -267,6 +276,9 @@ impl MeshQuery<FaceId,EdgeId,VertId> for PhysicsMesh{
|
||||
fn vert_edges(&self,vert_id:VertId)->Cow<Vec<EdgeId>>{
|
||||
Cow::Borrowed(&self.vert_topology[vert_id.0].edges)
|
||||
}
|
||||
fn vert_faces(&self,vert_id:VertId)->Cow<Vec<FaceId>>{
|
||||
Cow::Borrowed(&self.vert_topology[vert_id.0].faces)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TransformedMesh<'a>{
|
||||
@ -418,6 +430,10 @@ impl MeshQuery<FaceId,EdgeId,VertId> for TransformedMesh<'_>{
|
||||
fn vert_edges(&self,vert_id:VertId)->Cow<Vec<EdgeId>>{
|
||||
self.mesh.vert_edges(vert_id)
|
||||
}
|
||||
#[inline]
|
||||
fn vert_faces(&self,vert_id:VertId)->Cow<Vec<FaceId>>{
|
||||
self.mesh.vert_faces(vert_id)
|
||||
}
|
||||
}
|
||||
|
||||
//Note that a face on a minkowski mesh refers to a pair of fevs on the meshes it's summed from
|
||||
@ -566,6 +582,9 @@ impl MeshQuery<MinkowskiFace,MinkowskiEdge,MinkowskiVert> for MinkowskiMesh<'_>{
|
||||
},
|
||||
}
|
||||
}
|
||||
fn vert_faces(&self,vert_id:MinkowskiVert)->Cow<Vec<MinkowskiFace>>{
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Loading…
Reference in New Issue
Block a user