Blender Git Commits

Blender Git "mesh-transfer-data" branch commits.

Page: 10 / 10

October 12, 2014, 15:39 (GMT)
Merge branch 'master' into mesh-transfer-data
October 9, 2014, 18:05 (GMT)
Fix wrong interpolation of loops in polygons!
October 9, 2014, 17:21 (GMT)
Merge branch 'master' into mesh-transfer-data
October 8, 2014, 17:59 (GMT)
More fixes...
October 8, 2014, 15:14 (GMT)
Merge branch 'master' into mesh-transfer-data
October 7, 2014, 21:00 (GMT)
Fixes to loop mapping code. Looks like UV transfer is starting to look better ;)
October 7, 2014, 20:15 (GMT)
First hooking of transfer data and geom mapping for polys and loops.

Using UVMap as test subject. Not even half working yet, though.
October 7, 2014, 14:32 (GMT)
Merge branch 'master' into mesh-transfer-data
October 4, 2014, 17:45 (GMT)
Code compiles again - which does not means it works, by far!

Anyway, neither poly nor loop mapping code is linked to anything yet.
October 4, 2014, 14:51 (GMT)
Merge branch 'master' into mesh-transfer-data
October 3, 2014, 20:52 (GMT)
Merge branch 'master' into mesh-transfer-data
October 3, 2014, 20:46 (GMT)
Mesh Transfer Data
**********

WARNING - fully non-functional commit (not even compilable!).

Mesh transfer data (data here being either real CD layers, like e.g. skinning weights, UVs, etc., or 'fake' ones, like e.g. vgroups, shapekeys, but also edge crease, smooth/sharp/seam flags, etc.) is subdivided in several sub-modules:
* Mapping between mesh elements (verts, edges, polys or loops), in BKE's `mesh_mapping`.
* Mapping between data layers (for non-singleton data types), mostly handled in `ED_object` and BKE's `customdata` areas.
* Transfer of single data layer, mostly handled in BKE's `customdata` area.

Additional possibilities (only relevant for a subset of data types) are barely sketched up currently:
* A way to filter which elements of destination we actually want to affect (currently, all, also the possibility to only affect those below a given threshold - could also add e.g. vgroup-based selection, etc.).
* A way to alter destination elements' data in other ways than mere replace (add/sub/mul/div/etc.).

All this is designed to be both easy to setup (code-wise) for simple types, and yet flexible enough to be usable by complex/weird data types like vgroups and shapekeys. For now, it is only expected to work in Object/modifier contexts, not quite sure whether having this in BMesh would be that much useful?

Mesh Elements Mapping
-----
This part is rather independent. Vertices and edges mappings are implemented (but not really tested yet, think will have to write some gtests for that anyway). Polygons are also finished, but not tested at all. Loops are mostly written, but not yet finished nor compilable (the most complex ones, since we have to take islands in consideration here).

Note mapping supports a distance threshold, to prevent geometry to far away from each other to match.

Data Layers Mapping
-----
This is handled by a struct defined in BKE_customdata, but filled in ED_object code. Each instance of DataTransferLayerMapping contains all data needed to execute the data transfer for each element of the mesh mapping.

`object_transfer_data.c` handles the generation of those data layers mapping instance for basic types (usual CDLayers, but also bitflags and simple data like edge crease), complex types like vgroups and shapekeys are handled by dedicated helpers in there own files - trying to keep code well ordered.

Transfer of Single Data Layer
-----
This is a low-level simple func in BKE_customdata, that executes the data transfer itself, including weighted interpolation if needed. It expects pre-computed inputs (mesh elements' and data layers' mappings).

High Level
-----
`ED_data_transfer` is the high-level interface to all this, used by the `OBJECT_OT_data_transfer` operator. Once again, not all features are implemented yet, by far.
By: Miika HämäläinenLast update: Nov-07-2014 14:18MiikaHweb | 2003-2021