#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; virtual stl_vector_mp get_subface_geometries() const = 0; void update_geometry(const void *geometry_ptr, size_t subface_index = 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 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 stl_vector_mp &, const aabb_t &); void recompute_aabb(); aabb_t m_aabb{}; primitive_data_center_ptr_t data_center{}; };