#pragma once #include #include #include #include #include #include #include #include template using marked_subface_ptr_t = marked_ptr; struct subface; EXTERN_C struct PE_API primitive { primitive(primitive_data_center_t *data_center_ptr) : data_center(data_center_ptr) {} void destroy(); virtual primitive_type get_type() const = 0; virtual span> get_subfaces() const = 0; virtual stl_vector_mp get_subface_types() const = 0; dynamic_bitset_mp<> judge_sign_by_subface_sign(const stl_vector_mp> &) const; dynamic_bitset_mp<> judge_sign_by_subface_sign(const stl_vector_mp> &, const stl_vector_mp &) const; aabb_t fetch_aabb() const { return m_aabb; } void apply_transform(internal::transform_type, Eigen::Vector4d); protected: void initialize(const stl_vector_mp &, const stl_vector_mp &, const aabb_t &); aabb_t m_aabb{}; primitive_data_center_ptr_t data_center{}; };