Skip to content

Commit 6b26f36

Browse files
committed
[v0.1.18] 2026-03-18
- Updated helios-core to v1.3.69 ## Context - Added `doesPrimitiveExist()` method to check whether primitives exist by single UUID or list of UUIDs - Added `resolveMaterialTextures()` method for material-based texture suppression resolution (modifies colors in-place, returns resolved texture paths) - Added `packGPUBuffers()` method to pack GPU-ready geometry buffers into a single binary blob for zero-copy Three.js BufferGeometry loading
1 parent c106ab8 commit 6b26f36

12 files changed

+4396
-12
lines changed

docs/CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
# Changelog
22

3+
# [v0.1.18] 2026-03-18
4+
5+
- Updated helios-core to v1.3.70
6+
7+
## Plant Architecture
8+
- Added optional `include_hidden` parameter to `getAllPlantUUIDs()` to allow querying hidden prototype primitives
9+
- `deletePlantInstance()` now automatically cleans up hidden prototype primitives when all plant instances have been deleted
10+
11+
## Context
12+
- Added `doesPrimitiveExist()` method to check whether primitives exist by single UUID or list of UUIDs
13+
- Added `resolveMaterialTextures()` method for material-based texture suppression resolution (modifies colors in-place, returns resolved texture paths)
14+
- Added `packGPUBuffers()` method to pack GPU-ready geometry buffers into a single binary blob for zero-copy Three.js BufferGeometry loading
15+
316
# [v0.1.17] 2026-03-15
417

518
- Updated helios-core to v1.3.68

helios-core

Submodule helios-core updated 329 files

native/include/pyhelios_wrapper_context.h

Lines changed: 210 additions & 0 deletions
Large diffs are not rendered by default.

native/include/pyhelios_wrapper_plantarchitecture.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ PYHELIOS_API unsigned int addChildShoot(PlantArchitecture* plantarch, unsigned i
3535
// Plant query functions
3636
PYHELIOS_API int getAvailablePlantModels(PlantArchitecture* plantarch, char*** model_names, int* count);
3737
PYHELIOS_API unsigned int* getAllPlantObjectIDs(PlantArchitecture* plantarch, unsigned int plantID, int* count);
38-
PYHELIOS_API unsigned int* getAllPlantUUIDs(PlantArchitecture* plantarch, unsigned int plantID, int* count);
38+
PYHELIOS_API unsigned int* getAllPlantUUIDs(PlantArchitecture* plantarch, unsigned int plantID, bool include_hidden, int* count);
3939

4040
// Memory cleanup functions
4141
PYHELIOS_API void freeStringArray(char** strings, int count);

native/src/pyhelios_wrapper_context.cpp

Lines changed: 1960 additions & 1 deletion
Large diffs are not rendered by default.

native/src/pyhelios_wrapper_plantarchitecture.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ extern "C" {
405405
}
406406
}
407407

408-
PYHELIOS_API unsigned int* getAllPlantUUIDs(PlantArchitecture* plantarch, unsigned int plantID, int* count) {
408+
PYHELIOS_API unsigned int* getAllPlantUUIDs(PlantArchitecture* plantarch, unsigned int plantID, bool include_hidden, int* count) {
409409
try {
410410
clearError();
411411
if (!plantarch) {
@@ -418,7 +418,7 @@ extern "C" {
418418
return nullptr;
419419
}
420420

421-
std::vector<uint> uuids = plantarch->getAllPlantUUIDs(plantID);
421+
std::vector<uint> uuids = plantarch->getAllPlantUUIDs(plantID, include_hidden);
422422

423423
// Convert vector to static array for return
424424
static thread_local std::vector<unsigned int> static_result;

pyhelios/Context.py

Lines changed: 566 additions & 0 deletions
Large diffs are not rendered by default.

pyhelios/PlantArchitecture.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -796,15 +796,17 @@ def getAllPlantObjectIDs(self, plant_id: int) -> List[int]:
796796
except Exception as e:
797797
raise PlantArchitectureError(f"Failed to get object IDs for plant {plant_id}: {e}")
798798

799-
def getAllPlantUUIDs(self, plant_id: int) -> List[int]:
799+
def getAllPlantUUIDs(self, plant_id: int, include_hidden: bool = False) -> List[int]:
800800
"""
801801
Get all primitive UUIDs for a specific plant.
802802
803803
Args:
804804
plant_id: ID of the plant instance
805+
include_hidden: If True, also include UUIDs of hidden prototype
806+
primitives managed by this PlantArchitecture instance.
805807
806808
Returns:
807-
List of primitive UUIDs comprising the plant
809+
List of primitive UUIDs comprising the plant (and optionally hidden prototypes)
808810
809811
Raises:
810812
ValueError: If plant_id is negative
@@ -818,7 +820,7 @@ def getAllPlantUUIDs(self, plant_id: int) -> List[int]:
818820
raise ValueError("Plant ID must be non-negative")
819821

820822
try:
821-
return plantarch_wrapper.getAllPlantUUIDs(self._plantarch_ptr, plant_id)
823+
return plantarch_wrapper.getAllPlantUUIDs(self._plantarch_ptr, plant_id, include_hidden)
822824
except Exception as e:
823825
raise PlantArchitectureError(f"Failed to get UUIDs for plant {plant_id}: {e}")
824826

0 commit comments

Comments
 (0)