diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-05-08 16:56:17 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-05-08 16:56:17 +0400 |
commit | 02c1e6162c8253e841497b5c10142d2b31fbc2ea (patch) | |
tree | e4437a78281e6ee10d874297cb49a813d811b99b /source/blender/editors/mesh/editmesh_knife.c | |
parent | fdc4eea1882186eae6533e624c03fa78814bbe30 (diff) |
knife tool: use 2d vectors for screen coords.
Diffstat (limited to 'source/blender/editors/mesh/editmesh_knife.c')
-rw-r--r-- | source/blender/editors/mesh/editmesh_knife.c | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 5957e71c57c..11a63c8a758 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -91,7 +91,7 @@ typedef struct KnifeVert { ListBase edges; ListBase faces; - float co[3], cageco[3], sco[3]; /* sco is screen coordinates for cageco */ + float co[3], cageco[3], sco[2]; /* sco is screen coordinates for cageco */ bool is_face, in_space; bool draw; } KnifeVert; @@ -114,7 +114,7 @@ typedef struct BMEdgeHit { KnifeEdge *kfe; float hit[3], cagehit[3]; float realhit[3]; /* used in midpoint mode */ - float schit[3]; + float schit[2]; float l; /* lambda along cut line */ float perc; /* lambda along hit line */ KnifeVert *v; /* set if snapped to a vert */ @@ -244,9 +244,9 @@ BLI_INLINE int round_ftoi(float x) } #endif -static void knife_project_v3(const KnifeTool_OpData *kcd, const float co[3], float sco[3]) +static void knife_project_v2(const KnifeTool_OpData *kcd, const float co[3], float sco[2]) { - ED_view3d_project_float_v3_m4(kcd->ar, co, sco, (float (*)[4])kcd->projmat); + ED_view3d_project_float_v2_m4(kcd->ar, co, sco, (float (*)[4])kcd->projmat); } static void knife_pos_data_clear(KnifePosData *kpd) @@ -336,7 +336,7 @@ static KnifeVert *new_knife_vert(KnifeTool_OpData *kcd, const float co[3], const copy_v3_v3(kfv->co, co); copy_v3_v3(kfv->cageco, cageco); - knife_project_v3(kcd, kfv->co, kfv->sco); + knife_project_v2(kcd, kfv->co, kfv->sco); return kfv; } @@ -1084,11 +1084,11 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) glBegin(GL_POINTS); lh = kcd->linehits; for (i = 0; i < kcd->totlinehit; i++, lh++) { - float sv1[3], sv2[3]; + float sv1[2], sv2[2]; - knife_project_v3(kcd, lh->kfe->v1->cageco, sv1); - knife_project_v3(kcd, lh->kfe->v2->cageco, sv2); - knife_project_v3(kcd, lh->cagehit, lh->schit); + knife_project_v2(kcd, lh->kfe->v1->cageco, sv1); + knife_project_v2(kcd, lh->kfe->v2->cageco, sv2); + knife_project_v2(kcd, lh->cagehit, lh->schit); if (len_squared_v2v2(lh->schit, sv1) < vthresh4_sq) { copy_v3_v3(lh->cagehit, lh->kfe->v1->cageco); @@ -1217,7 +1217,7 @@ static BMEdgeHit *knife_edge_tri_isect(KnifeTool_OpData *kcd, BMBVHTree *bmtree, } if (isect_line_tri_v3(kfe->v1->cageco, kfe->v2->cageco, v1, v2, v3, &lambda, NULL)) { - float p[3], no[3], view[3], sp[3]; + float p[3], no[3], view[3], sp[2]; interp_v3_v3v3(p, kfe->v1->cageco, kfe->v2->cageco, lambda); @@ -1238,7 +1238,7 @@ static BMEdgeHit *knife_edge_tri_isect(KnifeTool_OpData *kcd, BMBVHTree *bmtree, continue; } - knife_project_v3(kcd, p, sp); + knife_project_v2(kcd, p, sp); ED_view3d_unproject(mats, view, sp[0], sp[1], 0.0f); mul_m4_v3(kcd->ob->imat, view); @@ -1312,7 +1312,7 @@ static BMEdgeHit *knife_edge_tri_isect(KnifeTool_OpData *kcd, BMBVHTree *bmtree, else { copy_v3_v3(hit.hit, p); } - knife_project_v3(kcd, hit.cagehit, hit.schit); + knife_project_v2(kcd, hit.cagehit, hit.schit); BLI_array_append(edges, hit); BLI_smallhash_insert(ehash, (intptr_t)kfe, NULL); @@ -1371,7 +1371,7 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd) bglMats mats; BMEdgeHit *e1, *e2; SmallHash hash, *ehash = &hash; - float v1[3], v2[3], v3[3], v4[4], s1[3], s2[3]; + float v1[3], v2[3], v3[3], v4[4], s1[2], s2[2]; int i, c1, c2; knife_bgl_get_mats(kcd, &mats); @@ -1386,8 +1386,8 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd) copy_v3_v3(v2, kcd->curr.cage); /* project screen line's 3d coordinates back into 2d */ - knife_project_v3(kcd, v1, s1); - knife_project_v3(kcd, v2, s2); + knife_project_v2(kcd, v1, s1); + knife_project_v2(kcd, v2, s2); if (len_squared_v2v2(s1, s2) < 1) return; @@ -1527,7 +1527,7 @@ static int knife_sample_screen_density(KnifeTool_OpData *kcd, const float radius { BMFace *f; bool is_space; - float co[3], cageco[3], sco[3]; + float co[3], cageco[3], sco[2]; BLI_assert(kcd->is_interactive == true); @@ -1540,7 +1540,7 @@ static int knife_sample_screen_density(KnifeTool_OpData *kcd, const float radius float dis_sq; int c = 0; - knife_project_v3(kcd, cageco, sco); + knife_project_v2(kcd, cageco, sco); lst = knife_get_face_kedges(kcd, f); for (ref = lst->first; ref; ref = ref->next) { @@ -1550,7 +1550,7 @@ static int knife_sample_screen_density(KnifeTool_OpData *kcd, const float radius for (i = 0; i < 2; i++) { KnifeVert *kfv = i ? kfe->v2 : kfe->v1; - knife_project_v3(kcd, kfv->cageco, kfv->sco); + knife_project_v2(kcd, kfv->cageco, kfv->sco); dis_sq = len_squared_v2v2(kfv->sco, sco); if (dis_sq < radius_sq) { @@ -1595,7 +1595,7 @@ static float knife_snap_size(KnifeTool_OpData *kcd, float maxsize) static KnifeEdge *knife_find_closest_edge(KnifeTool_OpData *kcd, float p[3], float cagep[3], BMFace **fptr, bool *is_space) { BMFace *f; - float co[3], cageco[3], sco[3], maxdist = knife_snap_size(kcd, kcd->ethresh); + float co[3], cageco[3], sco[2], maxdist = knife_snap_size(kcd, kcd->ethresh); if (kcd->ignore_vert_snapping) maxdist *= 0.5f; @@ -1615,7 +1615,7 @@ static KnifeEdge *knife_find_closest_edge(KnifeTool_OpData *kcd, float p[3], flo Ref *ref; float dis, curdis = FLT_MAX; - knife_project_v3(kcd, cageco, sco); + knife_project_v2(kcd, cageco, sco); /* look through all edges associated with this face */ lst = knife_get_face_kedges(kcd, f); @@ -1623,8 +1623,8 @@ static KnifeEdge *knife_find_closest_edge(KnifeTool_OpData *kcd, float p[3], flo KnifeEdge *kfe = ref->ref; /* project edge vertices into screen space */ - knife_project_v3(kcd, kfe->v1->cageco, kfe->v1->sco); - knife_project_v3(kcd, kfe->v2->cageco, kfe->v2->sco); + knife_project_v2(kcd, kfe->v1->cageco, kfe->v1->sco); + knife_project_v2(kcd, kfe->v2->cageco, kfe->v2->sco); dis = dist_to_line_segment_v2(sco, kfe->v1->sco, kfe->v2->sco); if (dis < curdis && dis < maxdist) { @@ -1691,7 +1691,7 @@ static KnifeVert *knife_find_closest_vert(KnifeTool_OpData *kcd, float p[3], flo bool *is_space) { BMFace *f; - float co[3], cageco[3], sco[3], maxdist = knife_snap_size(kcd, kcd->vthresh); + float co[3], cageco[3], sco[2], maxdist = knife_snap_size(kcd, kcd->vthresh); if (kcd->ignore_vert_snapping) maxdist *= 0.5f; @@ -1710,7 +1710,7 @@ static KnifeVert *knife_find_closest_vert(KnifeTool_OpData *kcd, float p[3], flo KnifeVert *curv = NULL; float dis_sq, curdis_sq = FLT_MAX; - knife_project_v3(kcd, cageco, sco); + knife_project_v2(kcd, cageco, sco); lst = knife_get_face_kedges(kcd, f); for (ref = lst->first; ref; ref = ref->next) { @@ -1720,7 +1720,7 @@ static KnifeVert *knife_find_closest_vert(KnifeTool_OpData *kcd, float p[3], flo for (i = 0; i < 2; i++) { KnifeVert *kfv = i ? kfe->v2 : kfe->v1; - knife_project_v3(kcd, kfv->cageco, kfv->sco); + knife_project_v2(kcd, kfv->cageco, kfv->sco); dis_sq = len_squared_v2v2(kfv->sco, sco); if (dis_sq < curdis_sq && dis_sq < maxdist_sq) { |