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
|
verts:[VertId;2],//bottom, top
|
||||||
}
|
}
|
||||||
struct VertRefs{
|
struct VertRefs{
|
||||||
//faces:Vec<FaceId>,
|
faces:Vec<FaceId>,
|
||||||
edges:Vec<EdgeId>,
|
edges:Vec<EdgeId>,
|
||||||
}
|
}
|
||||||
pub struct PhysicsMesh{
|
pub struct PhysicsMesh{
|
||||||
@ -49,6 +49,7 @@ pub struct PhysicsMesh{
|
|||||||
#[derive(Default,Clone)]
|
#[derive(Default,Clone)]
|
||||||
struct VertRefGuy{
|
struct VertRefGuy{
|
||||||
edges:std::collections::HashSet<EdgeId>,
|
edges:std::collections::HashSet<EdgeId>,
|
||||||
|
faces:std::collections::HashSet<FaceId>,
|
||||||
}
|
}
|
||||||
#[derive(Clone,Hash,Eq,PartialEq)]
|
#[derive(Clone,Hash,Eq,PartialEq)]
|
||||||
struct EdgeIdGuy([VertId;2]);
|
struct EdgeIdGuy([VertId;2]);
|
||||||
@ -120,9 +121,13 @@ impl From<&crate::model::IndexedModel> for PhysicsMesh{
|
|||||||
}else{
|
}else{
|
||||||
edge_ref_guy.push(0,face_id);
|
edge_ref_guy.push(0,face_id);
|
||||||
}
|
}
|
||||||
//index edge into vertices
|
//index edges & face 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);
|
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
|
//return edge_id
|
||||||
edge_id
|
edge_id
|
||||||
}).collect();
|
}).collect();
|
||||||
@ -158,7 +163,10 @@ impl From<&crate::model::IndexedModel> for PhysicsMesh{
|
|||||||
EdgeRefs{faces:edge_ref_guy.0,verts:edge_id_guy.0}
|
EdgeRefs{faces:edge_ref_guy.0,verts:edge_id_guy.0}
|
||||||
).collect(),
|
).collect(),
|
||||||
vert_topology:vert_edges.into_iter().map(|vert_ref_guy|
|
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(),
|
).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_faces(&self,edge_id:EDGE)->Cow<[FACE;2]>;
|
||||||
fn edge_verts(&self,edge_id:EDGE)->Cow<[VERT;2]>;
|
fn edge_verts(&self,edge_id:EDGE)->Cow<[VERT;2]>;
|
||||||
fn vert_edges(&self,vert_id:VERT)->Cow<Vec<EDGE>>;
|
fn vert_edges(&self,vert_id:VERT)->Cow<Vec<EDGE>>;
|
||||||
|
fn vert_faces(&self,vert_id:VERT)->Cow<Vec<FACE>>;
|
||||||
}
|
}
|
||||||
impl PhysicsMesh{
|
impl PhysicsMesh{
|
||||||
pub fn verts<'a>(&'a self)->impl Iterator<Item=Planar64Vec3>+'a{
|
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>>{
|
fn vert_edges(&self,vert_id:VertId)->Cow<Vec<EdgeId>>{
|
||||||
Cow::Borrowed(&self.vert_topology[vert_id.0].edges)
|
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>{
|
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>>{
|
fn vert_edges(&self,vert_id:VertId)->Cow<Vec<EdgeId>>{
|
||||||
self.mesh.vert_edges(vert_id)
|
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
|
//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]
|
#[test]
|
||||||
|
Loading…
Reference in New Issue
Block a user