You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.5 KiB
60 lines
2.5 KiB
#pragma once
|
|
|
|
#include <Eigen/Eigen>
|
|
|
|
#include "mesh3.h"
|
|
|
|
namespace da {
|
|
namespace sha {
|
|
struct MatMesh3 {
|
|
Eigen::MatrixXd mat_coordinates;
|
|
Eigen::MatrixXi mat_faces;
|
|
|
|
size_t NumVertices() const { return mat_coordinates.rows(); }
|
|
size_t NumFaces() const { return mat_faces.rows(); }
|
|
auto AlignedBox(double expand = 0) const {
|
|
auto domain = Eigen::AlignedBox3d(mat_coordinates.colwise().minCoeff(),
|
|
mat_coordinates.colwise().maxCoeff());
|
|
Eigen::Vector3d domain_sizes = domain.sizes();
|
|
domain.min() -= domain_sizes * expand;
|
|
domain.max() += domain_sizes * expand;
|
|
return domain;
|
|
}
|
|
};
|
|
|
|
struct MatMesh2 {
|
|
Eigen::MatrixXd mat_coordinates;
|
|
Eigen::MatrixXi mat_beams;
|
|
|
|
size_t NumVertices() const { return mat_coordinates.rows(); }
|
|
size_t NumBeams() const { return mat_beams.rows(); }
|
|
};
|
|
|
|
auto CreateMatMesh3FromSurfaceMesh3(const SurfaceMesh3 &mesh3, size_t num_face_vertices = 3)
|
|
-> MatMesh3;
|
|
auto CreateSurfaceMesh3FromMatMesh3(const MatMesh3 &matmesh3) -> SurfaceMesh3;
|
|
auto CreateFaceMatrixFromSurfaceTopoMesh3(const SurfaceTopoMesh3 &mesh3,
|
|
size_t num_face_vertices = 3) -> Eigen::MatrixXi;
|
|
|
|
auto CombineTwoMatMesh3(const MatMesh3 &matmesh_1, const MatMesh3 &matmesh_2) -> MatMesh3;
|
|
auto CombineTwoMatMesh2(const MatMesh2 &matmesh_1, const MatMesh2 &matmesh_2) -> MatMesh2;
|
|
|
|
auto BooleanIntersectTwoMatMesh3(const MatMesh3 &matmesh_1, const MatMesh3 &matmesh_2,
|
|
Eigen::VectorXi &brith_face_indices) -> MatMesh3;
|
|
auto BooleanUnionTwoMatMesh3(const MatMesh3 &matmesh_1, const MatMesh3 &matmesh_2,
|
|
Eigen::VectorXi &brith_face_indices) -> MatMesh3;
|
|
auto BooleanMinusTwoMatMesh3(const MatMesh3 &matmesh_1, const MatMesh3 &matmesh_2,
|
|
Eigen::VectorXi &brith_face_indices) -> MatMesh3;
|
|
|
|
auto BooleanIntersectTwoMatMesh3(const MatMesh3 &matmesh_1, const MatMesh3 &matmesh_2) -> MatMesh3;
|
|
auto BooleanUnionTwoMatMesh3(const MatMesh3 &matmesh_1, const MatMesh3 &matmesh_2) -> MatMesh3;
|
|
auto BooleanMinusTwoMatMesh3(const MatMesh3 &matmesh_1, const MatMesh3 &matmesh_2) -> MatMesh3;
|
|
|
|
auto RemoveUnreferencedVertices(const MatMesh3 &matmesh) -> MatMesh3;
|
|
auto RemoveUnreferencedVertices(const MatMesh2 &matmesh) -> MatMesh2;
|
|
|
|
auto Materialize(const MatMesh2 &matmesh, const Eigen::VectorXd &beam_radiuses) -> MatMesh3;
|
|
} // namespace sha
|
|
using sha::MatMesh2;
|
|
using sha::MatMesh3;
|
|
} // namespace da
|
|
|