Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGermano Cavalcante <germano.costa@ig.com.br>2021-01-04 23:36:51 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2021-01-04 23:37:08 +0300
commit54ee4109143b6fdabf749d2fde183907469cfa3b (patch)
tree06bdc8456841ddce928c7ac3f9c8c42db4f46797 /source/blender/editors/transform/transform_convert.h
parent8c80299fc4493cac640ab4cd56b9bc34f606ee2c (diff)
Fix T84376: Skin Resize(Ctrl + A) does not work in Symmetry
Since the `TransData` converted from vertices is the same used for other transform modes (Move, Rotate, Resize), the logic used for mirroring focused only on the position of the vertices. The solution here is to create a specific `TansData` for `CD_MVERT_SKIN`.
Diffstat (limited to 'source/blender/editors/transform/transform_convert.h')
-rw-r--r--source/blender/editors/transform/transform_convert.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/source/blender/editors/transform/transform_convert.h b/source/blender/editors/transform/transform_convert.h
index 59fcd016020..be4322b42e2 100644
--- a/source/blender/editors/transform/transform_convert.h
+++ b/source/blender/editors/transform/transform_convert.h
@@ -25,6 +25,8 @@
#pragma once
struct BezTriple;
+struct BMEditMesh;
+struct BMesh;
struct FCurve;
struct ListBase;
struct Object;
@@ -65,6 +67,7 @@ typedef enum eTransConvertType {
TC_MBALL_VERTS,
TC_MESH_VERTS,
TC_MESH_EDGES,
+ TC_MESH_SKIN,
TC_MESH_UV,
TC_NLA_DATA,
TC_NODE_DATA,
@@ -136,6 +139,55 @@ void special_aftertrans_update__mask(bContext *C, TransInfo *t);
void createTransMBallVerts(TransInfo *t);
/* transform_convert_mesh.c */
+struct TransIslandData {
+ float (*center)[3];
+ float (*axismtx)[3][3];
+ int island_tot;
+ int *island_vert_map;
+};
+
+struct MirrorDataVert {
+ int index;
+ int flag;
+};
+
+struct TransMirrorData {
+ struct MirrorDataVert *vert_map;
+ int mirror_elem_len;
+};
+
+struct TransMeshDataCrazySpace {
+ float (*quats)[4];
+ float (*defmats)[3][3];
+};
+
+void transform_convert_mesh_islands_calc(struct BMEditMesh *em,
+ const bool calc_single_islands,
+ const bool calc_island_center,
+ const bool calc_island_axismtx,
+ struct TransIslandData *r_island_data);
+void transform_convert_mesh_islanddata_free(struct TransIslandData *island_data);
+void transform_convert_mesh_connectivity_distance(struct BMesh *bm,
+ const float mtx[3][3],
+ float *dists,
+ int *index);
+void transform_convert_mesh_mirrordata_calc(struct BMEditMesh *em,
+ const bool use_select,
+ const bool use_topology,
+ const bool mirror_axis[3],
+ struct TransMirrorData *r_mirror_data);
+void transform_convert_mesh_mirrordata_free(struct TransMirrorData *mirror_data);
+void transform_convert_mesh_crazyspace_detect(TransInfo *t,
+ struct TransDataContainer *tc,
+ struct BMEditMesh *em,
+ struct TransMeshDataCrazySpace *r_crazyspace_data);
+void transform_convert_mesh_crazyspace_transdata_set(const float mtx[3][3],
+ const float smtx[3][3],
+ const float defmat[3][3],
+ const float quat[4],
+ struct TransData *r_td);
+void transform_convert_mesh_crazyspace_free(struct TransMeshDataCrazySpace *r_crazyspace_data);
+
void createTransEditVerts(TransInfo *t);
void recalcData_mesh(TransInfo *t);
void special_aftertrans_update__mesh(bContext *C, TransInfo *t);
@@ -143,6 +195,10 @@ void special_aftertrans_update__mesh(bContext *C, TransInfo *t);
/* transform_convert_mesh_edge.c */
void createTransEdge(TransInfo *t);
+/* transform_convert_mesh_skin.c */
+void createTransMeshSkin(TransInfo *t);
+void recalcData_mesh_skin(TransInfo *t);
+
/* transform_convert_mesh_uv.c */
void createTransUVs(bContext *C, TransInfo *t);
void recalcData_uv(TransInfo *t);