| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -12,6 +12,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					template <typename T> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					using marked_subface_ptr_t = marked_ptr<T, 1>; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					using aabb_t               = Eigen::AlignedBox<double, 3>; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum class sign_t : uint8_t { positive = 1, negative = 2, zero = 0 }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -52,17 +53,14 @@ EXTERN_C struct PE_API primitive { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    virtual primitive_type                 get_type() const          = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    virtual marked_subface_ptr_t<subface> *get_subface() const       = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    virtual size_t                         get_subface_count() const = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    aabb_t                                 m_aabb = aabb_t(Eigen::Vector3d(-1, -1, -1), Eigen::Vector3d(1, 1, 1)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // sign_t judge_sign_by_subface_sdf(const std::vector<double> &) const;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // sign_t judge_sign_by_subface_sdf_sign(const std::vector<sign_t> &) const;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    dynamic_bitset_mp<> judge_sign_by_subface_sign(stl_vector_mp<dynamic_bitset_mp<>>) const; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // for simple primitive: sphere, cylinder, cone, box
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // we use world_to_local as OBB and judge inside/outside by [-1, 1]^3
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // so we don't need to fetch aabb anymore
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // aabb fetch_aabb() const;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // CAUTION: keep characteristics local_to_world as the first subface's part
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const internal::transform_block &get_identity_local_to_world() const; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    aabb_t                           fetch_aabb() const; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    void apply_transform(internal::transform_type, Eigen::Vector4d); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |