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.

57 lines
1.4 KiB

2 years ago
//
// Created by cflin on 4/24/23.
//
#ifndef TOP3D_IRREGULARMESH_H
#define TOP3D_IRREGULARMESH_H
#include "Mesh.h"
namespace da::sha {
namespace top {
class Boundary;
struct ModelMesh {
Eigen::MatrixXd points;
Eigen::MatrixXi surfaces;
};
class IrregularMesh : public Mesh {
friend class Boundary;
public:
IrregularMesh(const fs_path &arbitrary_stl_path,const fs_path &chosen_stl_path,double relative_length_of_voxel,int dofs_each_node=3);
int GetNumDofs() const override {
return num_node_pixel_ * DOFS_EACH_NODE;
}
int GetNumEles() const override {
return num_pixel_;
}
int GetNumNodes() const override {
return num_node_pixel_;
}
private:
double EvaluateArbitrarySDF(const Eigen::Vector3d &point);
double EvaluateChosenSDF(const Eigen::Vector3d &point);
Eigen::VectorXd EvaluateArbitrarySDF (const Eigen::MatrixXd & points);
Eigen::VectorXd EvaluateChosenSDF(const Eigen::MatrixXd & points);
double num_pixel_;
double num_node_pixel_;
Eigen::Vector3d min_point_box_;
Eigen::Vector3d len_box_;
ModelMesh arbitrary_mesh_;
ModelMesh chosen_part_;
};
} // top
} // da::sha
#endif //TOP3D_IRREGULARMESH_H