Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 93 additions & 8 deletions packages/evo-objects/docs/examples/typed-objects.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,91 @@
"cell_type": "markdown",
"id": "20",
"metadata": {},
"source": [
"## Creating a TriangleMesh object\n",
"\n",
"To create a new 'triangle-mesh' object, we use the `TriangleMeshData` class. A triangle mesh is defined by:\n",
"- `vertices`: A DataFrame with 'x', 'y', 'z' columns for vertex coordinates, plus any vertex attributes\n",
"- `triangles`: A DataFrame with 'n0', 'n1', 'n2' columns containing 0-based vertex indices that define each triangle, plus any triangle attributes"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "21",
"metadata": {},
"outputs": [],
"source": [
"from evo.objects.typed import TriangleMesh, TriangleMeshData\n",
"\n",
"# Create a simple pyramid mesh: 4 triangular faces with a square base\n",
"vertices_df = pd.DataFrame(\n",
" {\n",
" \"x\": [0.0, 10.0, 10.0, 0.0, 5.0], # 4 base vertices + 1 apex\n",
" \"y\": [0.0, 0.0, 10.0, 10.0, 5.0],\n",
" \"z\": [0.0, 0.0, 0.0, 0.0, 8.0],\n",
" \"vertex_id\": [0, 1, 2, 3, 4], # Example vertex attribute\n",
" }\n",
")\n",
"\n",
"# Define the triangles using vertex indices\n",
"triangles_df = pd.DataFrame(\n",
" {\n",
" \"n0\": [0, 1, 2, 3, 0, 0], # First vertex of each triangle\n",
" \"n1\": [1, 2, 3, 0, 2, 3], # Second vertex of each triangle\n",
" \"n2\": [4, 4, 4, 4, 1, 2], # Third vertex of each triangle\n",
" \"face_type\": pd.Categorical.from_codes([0, 0, 0, 0, 1, 1], [\"side\", \"base\"]), # Example triangle attribute\n",
" }\n",
")\n",
"\n",
"mesh_data = TriangleMeshData(\n",
" name=\"Test Pyramid Mesh 20240601_123456_2\",\n",
" vertices=vertices_df,\n",
" triangles=triangles_df,\n",
")\n",
"\n",
"created_mesh = await TriangleMesh.create(manager, mesh_data)\n",
"print(f\"Created triangle-mesh object: {created_mesh.metadata.url}\")"
]
},
{
"cell_type": "markdown",
"id": "22",
"metadata": {},
"source": [
"## Downloading a TriangleMesh object\n",
"\n",
"To download an existing 'triangle-mesh' object, use the `TriangleMesh.from_reference` class method. You can then access the vertices, triangles, and their attributes."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "23",
"metadata": {},
"outputs": [],
"source": [
"mesh = await TriangleMesh.from_reference(manager, created_mesh.metadata.url)\n",
"\n",
"print(f\"Downloaded triangle-mesh object with name: {mesh.name}\")\n",
"print(f\"Number of vertices: {mesh.num_vertices}\")\n",
"print(f\"Number of triangles: {mesh.num_triangles}\")\n",
"print(f\"Bounding Box: {mesh.bounding_box}\")\n",
"\n",
"# Get vertices and triangles as DataFrames\n",
"vertices_df = await mesh.triangles.get_vertices_dataframe()\n",
"triangles_df = await mesh.triangles.get_indices_dataframe()\n",
"\n",
"print(f\"\\nVertices DataFrame shape: {vertices_df.shape}\")\n",
"print(f\"Triangles DataFrame shape: {triangles_df.shape}\")\n",
"\n",
"vertices_df.head()"
]
},
{
"cell_type": "markdown",
"id": "24",
"metadata": {},
"source": [
"## Creating a regular masked 3D grid object\n",
"\n",
Expand All @@ -281,7 +366,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "21",
"id": "25",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -315,7 +400,7 @@
},
{
"cell_type": "markdown",
"id": "22",
"id": "26",
"metadata": {},
"source": [
"### Downloading and inspecting a masked grid\n",
Expand All @@ -326,7 +411,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "23",
"id": "27",
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -347,7 +432,7 @@
},
{
"cell_type": "markdown",
"id": "24",
"id": "28",
"metadata": {},
"source": [
"## Creating a tensor 3D grid object\n",
Expand All @@ -360,7 +445,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "25",
"id": "29",
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -404,7 +489,7 @@
},
{
"cell_type": "markdown",
"id": "26",
"id": "30",
"metadata": {},
"source": [
"### Downloading and inspecting a tensor grid\n",
Expand All @@ -415,7 +500,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "27",
"id": "31",
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -433,7 +518,7 @@
{
"cell_type": "code",
"execution_count": null,
"id": "28",
"id": "32",
"metadata": {},
"outputs": [],
"source": [
Expand Down
10 changes: 6 additions & 4 deletions packages/evo-objects/src/evo/objects/typed/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
from .attributes import Attribute, Attributes
from .base import BaseObject
from .pointset import (
Locations,
PointSet,
PointSetData,
)
Expand All @@ -21,7 +20,6 @@
Regular3DGridData,
)
from .regular_masked_grid import (
MaskedCells,
RegularMasked3DGrid,
RegularMasked3DGridData,
)
Expand All @@ -30,6 +28,10 @@
Tensor3DGrid,
Tensor3DGridData,
)
from .triangle_mesh import (
TriangleMesh,
TriangleMeshData,
)
from .types import BoundingBox, CoordinateReferenceSystem, EpsgCode, Point3, Rotation, Size3d, Size3i

__all__ = [
Expand All @@ -40,8 +42,6 @@
"BoundingBox",
"CoordinateReferenceSystem",
"EpsgCode",
"Locations",
"MaskedCells",
"Point3",
"PointSet",
"PointSetData",
Expand All @@ -54,4 +54,6 @@
"Size3i",
"Tensor3DGrid",
"Tensor3DGridData",
"TriangleMesh",
"TriangleMeshData",
]
4 changes: 3 additions & 1 deletion packages/evo-objects/src/evo/objects/typed/_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ async def _data_to_schema(cls, data: Any, context: IContext, fb: IFeedback = NoF
)

data_client = get_data_client(context)
return await data_client.upload_dataframe(data, table_format=cls.table_format, fb=fb)
return await data_client.upload_dataframe(
data, table_format=cls.table_format, fb=fb, allow_casting=cls.table_format is not None
)


class DataTableAndAttributes(SchemaModel):
Expand Down
Loading