OverviewFilesCommitsIssuesDocsReleasesPeers

proc-nodes / src / core / proc_geometry.h

67 lines · c ref:
#ifndef PROC_NODES_PROC_GEOMETRY_H
#define PROC_NODES_PROC_GEOMETRY_H

#include "proc_curves.h"
#include "proc_instances.h"
#include "proc_mesh.h"
#include "proc_pointcloud.h"
#include "proc_volume.h"
#include <godot_cpp/classes/ref_counted.hpp>

namespace godot {

// Main geometry container — holds mesh, curves, pointcloud, instances.
// Any slot can be null (absent).
class ProcGeometry : public RefCounted {
	GDCLASS(ProcGeometry, RefCounted);

protected:
	static void _bind_methods();

	Ref<ProcMesh> mesh;
	Ref<ProcCurves> curves;
	Ref<ProcPointCloud> pointcloud;
	Ref<ProcInstances> instances;
	Ref<ProcVolume> volume;

public:
	// Getters
	Ref<ProcMesh> get_mesh() const { return mesh; }
	Ref<ProcCurves> get_curves() const { return curves; }
	Ref<ProcPointCloud> get_pointcloud() const { return pointcloud; }
	Ref<ProcInstances> get_instances() const { return instances; }
	Ref<ProcVolume> get_volume() const { return volume; }

	// Setters
	void set_mesh(const Ref<ProcMesh> &p_mesh) { mesh = p_mesh; }
	void set_curves(const Ref<ProcCurves> &p_curves) { curves = p_curves; }
	void set_pointcloud(const Ref<ProcPointCloud> &p_pc) { pointcloud = p_pc; }
	void set_instances(const Ref<ProcInstances> &p_inst) { instances = p_inst; }
	void set_volume(const Ref<ProcVolume> &p_vol) { volume = p_vol; }

	// Convenience: does this geometry have any data?
	bool is_empty() const;

	// Get domain size across all components
	int domain_size(AttrDomain p_domain) const;

	// Ensure mesh component exists (creates if null)
	Ref<ProcMesh> ensure_mesh();
	Ref<ProcCurves> ensure_curves();
	Ref<ProcPointCloud> ensure_pointcloud();
	Ref<ProcInstances> ensure_instances();
	Ref<ProcVolume> ensure_volume();

	// Deep copy (all components duplicated)
	Ref<ProcGeometry> duplicate_geometry() const;

	// Join another geometry into this one
	void join(const Ref<ProcGeometry> &p_other);

	ProcGeometry() = default;
};

} // namespace godot

#endif // PROC_NODES_PROC_GEOMETRY_H