#pragma once #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) {} virtual ~primitive() = default; void destroy(); virtual primitive_type get_type() const = 0; virtual span> get_subfaces() const = 0; virtual std::vector get_subface_types() const = 0; dynamic_bitset<> judge_sign_by_subface_sign(const std::vector> &) const; dynamic_bitset<> judge_sign_by_subface_sign(const std::vector> &, const std::vector &) const; aabb_t fetch_aabb() const { return m_aabb; } void apply_transform(internal::transform_type, Eigen::Vector4d); protected: void initialize(const std::vector &, const std::vector &, const aabb_t &); aabb_t m_aabb{}; primitive_data_center_ptr_t data_center{}; };