Blender V2.61 - r43446
Classes | Defines | Typedefs | Functions

editmesh_lib.c File Reference

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "MEM_guardedalloc.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
#include "BLI_edgehash.h"
#include "BLI_utildefines.h"
#include "BKE_customdata.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_mesh.h"
#include "ED_mesh.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "ED_transform.h"
#include "mesh_intern.h"

Go to the source code of this file.

Classes

struct  EdgeFaceRef

Defines

#define SET_EVE_FLAG(eve, flag)
#define SET_EED_FLAG(eed, flag)
#define NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(EDV1, EDV2)

Typedefs

typedef struct EdgeFaceRef EdgeFaceRef

Functions

int EM_nfaces_selected (EditMesh *em)
int EM_nedges_selected (EditMesh *em)
int EM_nvertices_selected (EditMesh *em)
void EM_stats_update (EditMesh *em)
void EM_set_actFace (EditMesh *em, EditFace *efa)
EditFace * EM_get_actFace (EditMesh *em, int sloppy)
int EM_get_actSelection (EditMesh *em, EditSelection *ese)
static int EM_check_selection (EditMesh *em, void *data)
void EM_remove_selection (EditMesh *em, void *data, int UNUSED(type))
void EM_store_selection (EditMesh *em, void *data, int type)
void EM_validate_selections (EditMesh *em)
static void EM_strip_selections (EditMesh *em)
void EM_editselection_center (float *center, EditSelection *ese)
void EM_editselection_normal (float *normal, EditSelection *ese)
void EM_editselection_plane (float *plane, EditSelection *ese)
void EM_select_face (EditFace *efa, int sel)
void EM_select_edge (EditEdge *eed, int sel)
void EM_select_face_fgon (EditMesh *em, EditFace *efa, int val)
int faceselectedOR (EditFace *efa, int flag)
int faceselectedAND (EditFace *efa, int flag)
void EM_clear_flag_all (EditMesh *em, int flag)
void EM_set_flag_all (EditMesh *em, int flag)
void EM_set_flag_all_selectmode (EditMesh *em, int flag)
void EM_deselect_flush (EditMesh *em)
void EM_select_flush (EditMesh *em)
static void check_fgons_selection (EditMesh *em)
void EM_selectmode_flush (EditMesh *em)
void EM_convertsel (EditMesh *em, short oldmode, short selectmode)
void EM_selectmode_to_scene (struct Scene *scene, struct Object *obedit)
void EM_selectmode_set (EditMesh *em)
void EM_hide_reset (EditMesh *em)
void EM_data_interp_from_verts (EditMesh *em, EditVert *v1, EditVert *v2, EditVert *eve, float fac)
void EM_data_interp_from_faces (EditMesh *em, EditFace *efa1, EditFace *efa2, EditFace *efan, int i1, int i2, int i3, int i4)
EditFace * EM_face_from_faces (EditMesh *em, EditFace *efa1, EditFace *efa2, int i1, int i2, int i3, int i4)
static void update_data_blocks (EditMesh *em, CustomData *olddata, CustomData *data)
void EM_add_data_layer (EditMesh *em, CustomData *data, int type, const char *name)
void EM_free_data_layer (EditMesh *em, CustomData *data, int type)
static void add_normal_aligned (float *nor, float *add)
static void set_edge_directions_f2 (EditMesh *em, int val)
short extrudeflag_face_indiv (EditMesh *em, short UNUSED(flag), float *UNUSED(nor))
short extrudeflag_edges_indiv (EditMesh *em, short flag, float *nor)
short extrudeflag_verts_indiv (EditMesh *em, short flag, float *UNUSED(nor))
static short extrudeflag_edge (Object *obedit, EditMesh *em, short UNUSED(flag), float *nor, int all)
short extrudeflag_vert (Object *obedit, EditMesh *em, short flag, float *nor, int all)
short extrudeflag (Object *obedit, EditMesh *em, short flag, float *nor, int all)
void rotateflag (EditMesh *em, short flag, float *cent, float rotmat[][3])
void translateflag (EditMesh *em, short flag, float *vec)
static EditVert * adduplicate_vertex (EditMesh *em, EditVert *eve, int flag)
void adduplicateflag (EditMesh *em, int flag)
void delfaceflag (EditMesh *em, int flag)
void recalc_editnormals (EditMesh *em)
int compareface (EditFace *vl1, EditFace *vl2)
EditFace * exist_face (EditMesh *em, EditVert *v1, EditVert *v2, EditVert *v3, EditVert *v4)
int convex (float *v1, float *v2, float *v3, float *v4)
float EM_face_area (EditFace *efa)
float EM_face_perimeter (EditFace *efa)
void EM_fgon_flags (EditMesh *em)
UvVertMap * EM_make_uv_vert_map (EditMesh *em, int selected, int do_face_idx_array, float *limit)
UvMapVert * EM_get_uv_map_vert (UvVertMap *vmap, unsigned int v)
void EM_free_uv_vert_map (UvVertMap *vmap)
int EM_view3d_poll (bContext *C)
void EM_make_hq_normals (EditMesh *em)
void EM_solidify (EditMesh *em, float dist)
static void tag_face_edges (EditFace *efa)
static int tag_face_edges_test (EditFace *efa)
static void em_deselect_nth_face (EditMesh *em, int nth, EditFace *efa_act)
static void tag_edge_verts (EditEdge *eed)
static int tag_edge_verts_test (EditEdge *eed)
static void em_deselect_nth_edge (EditMesh *em, int nth, EditEdge *eed_act)
static void em_deselect_nth_vert (EditMesh *em, int nth, EditVert *eve_act)
static void deselect_nth_active (EditMesh *em, EditVert **eve_p, EditEdge **eed_p, EditFace **efa_p)
int EM_deselect_nth (EditMesh *em, int nth)
void EM_project_snap_verts (bContext *C, ARegion *ar, Object *obedit, EditMesh *em)

Detailed Description

Definition in file editmesh_lib.c.


Define Documentation

#define NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE (   EDV1,
  EDV2 
)
Value:
; \
        { \
            const unsigned int mf_v1 = EDV1; \
            const unsigned int mf_v2 = EDV2; \
            edge_ref = (EdgeFaceRef *)BLI_edgehash_lookup(edge_hash, mf_v1, mf_v2); \
            if (!edge_ref) { \
                edge_ref = &edge_ref_array[edge_ref_count]; edge_ref_count++; \
                edge_ref->f1 = i; \
                edge_ref->f2 = -1; \
                BLI_edgehash_insert(edge_hash, mf_v1, mf_v2, edge_ref); \
            } \
            else { \
                edge_ref->f2 = i; \
            } \
        }

Referenced by dm_calc_normal(), and EM_make_hq_normals().

#define SET_EED_FLAG (   eed,
  flag 
)
Value:
if (eed->h==0) { \
        if (flag & SELECT && !(eed->f & SELECT)) { \
            ++seledge; \
        } \
        eed->f |= flag; \
        SET_EVE_FLAG(eed->v1, flag); \
        SET_EVE_FLAG(eed->v2, flag); \
    }

Definition at line 78 of file editmesh_lib.c.

Referenced by EM_set_flag_all_selectmode().

#define SET_EVE_FLAG (   eve,
  flag 
)
Value:
if (eve->h==0) { \
        if (flag & SELECT && !(eve->f & SELECT)) { \
            ++selvert; \
        } \
        eve->f |= flag; \
    }

Definition at line 70 of file editmesh_lib.c.


Typedef Documentation

typedef struct EdgeFaceRef EdgeFaceRef

Function Documentation

static void add_normal_aligned ( float *  nor,
float *  add 
) [static]
static EditVert* adduplicate_vertex ( EditMesh *  em,
EditVert *  eve,
int  flag 
) [static]

Definition at line 1835 of file editmesh_lib.c.

References addvertlist(), EditVert::co, EditVert::f, EditVert::tmp, and EditVert::v.

Referenced by adduplicateflag().

void adduplicateflag ( EditMesh *  em,
int  flag 
)
static void check_fgons_selection ( EditMesh *  em) [static]
int compareface ( EditFace *  vl1,
EditFace *  vl2 
)

Definition at line 2041 of file editmesh_lib.c.

References EditFace::v1, EditFace::v2, EditFace::v3, and EditFace::v4.

Referenced by exist_face(), and removedoublesflag().

int convex ( float *  v1,
float *  v2,
float *  v3,
float *  v4 
)

Definition at line 2097 of file editmesh_lib.c.

References ABS, isect_line_line_v2(), and normal_tri_v3().

Referenced by addedgeface_mesh(), beautify_fill(), draw_volume(), and edge_flip().

void delfaceflag ( EditMesh *  em,
int  flag 
)
static void deselect_nth_active ( EditMesh *  em,
EditVert **  eve_p,
EditEdge **  eed_p,
EditFace **  efa_p 
) [static]
void EM_add_data_layer ( EditMesh *  em,
CustomData *  data,
int  type,
const char *  name 
)
static int EM_check_selection ( EditMesh *  em,
void *  data 
) [static]
void EM_clear_flag_all ( EditMesh *  em,
int  flag 
)
void EM_convertsel ( EditMesh *  em,
short  oldmode,
short  selectmode 
)
void EM_data_interp_from_faces ( EditMesh *  em,
EditFace *  efa1,
EditFace *  efa2,
EditFace *  efan,
int  i1,
int  i2,
int  i3,
int  i4 
)
void EM_data_interp_from_verts ( EditMesh *  em,
EditVert *  v1,
EditVert *  v2,
EditVert *  eve,
float  fac 
)
void EM_deselect_flush ( EditMesh *  em)
int EM_deselect_nth ( EditMesh *  em,
int  nth 
)
static void em_deselect_nth_edge ( EditMesh *  em,
int  nth,
EditEdge *  eed_act 
) [static]
static void em_deselect_nth_face ( EditMesh *  em,
int  nth,
EditFace *  efa_act 
) [static]
static void em_deselect_nth_vert ( EditMesh *  em,
int  nth,
EditVert *  eve_act 
) [static]
void EM_editselection_center ( float *  center,
EditSelection *  ese 
)
void EM_editselection_normal ( float *  normal,
EditSelection *  ese 
)
void EM_editselection_plane ( float *  plane,
EditSelection *  ese 
)
float EM_face_area ( EditFace *  efa)
EditFace* EM_face_from_faces ( EditMesh *  em,
EditFace *  efa1,
EditFace *  efa2,
int  i1,
int  i2,
int  i3,
int  i4 
) [read]
float EM_face_perimeter ( EditFace *  efa)
void EM_fgon_flags ( EditMesh *  em)
void EM_free_data_layer ( EditMesh *  em,
CustomData *  data,
int  type 
)
void EM_free_uv_vert_map ( UvVertMap *  vmap)
EditFace* EM_get_actFace ( EditMesh *  em,
int  sloppy 
) [read]
int EM_get_actSelection ( EditMesh *  em,
EditSelection *  ese 
)
UvMapVert* EM_get_uv_map_vert ( UvVertMap *  vmap,
unsigned int  v 
) [read]

Definition at line 2372 of file editmesh_lib.c.

References EditVert::v, and UvVertMap::vert.

Referenced by select_linked(), stitch_exec(), uv_faces_do_sticky(), and uv_vertex_map_get().

void EM_hide_reset ( EditMesh *  em)
void EM_make_hq_normals ( EditMesh *  em)
UvVertMap* EM_make_uv_vert_map ( EditMesh *  em,
int  selected,
int  do_face_idx_array,
float *  limit 
) [read]
int EM_nedges_selected ( EditMesh *  em)
int EM_nfaces_selected ( EditMesh *  em)
int EM_nvertices_selected ( EditMesh *  em)
void EM_project_snap_verts ( bContext *  C,
ARegion *  ar,
Object *  obedit,
EditMesh *  em 
)
void EM_remove_selection ( EditMesh *  em,
void *  data,
int   UNUSEDtype 
)
void EM_select_edge ( EditEdge *  eed,
int  sel 
)
void EM_select_face ( EditFace *  efa,
int  sel 
)
void EM_select_face_fgon ( EditMesh *  em,
EditFace *  efa,
int  val 
)
void EM_select_flush ( EditMesh *  em)
void EM_selectmode_flush ( EditMesh *  em)
void EM_selectmode_set ( EditMesh *  em)
void EM_selectmode_to_scene ( struct Scene *  scene,
struct Object *  obedit 
)
void EM_set_actFace ( EditMesh *  em,
EditFace *  efa 
)
void EM_set_flag_all ( EditMesh *  em,
int  flag 
)
void EM_set_flag_all_selectmode ( EditMesh *  em,
int  flag 
)
void EM_solidify ( EditMesh *  em,
float  dist 
)
void EM_stats_update ( EditMesh *  em)
void EM_store_selection ( EditMesh *  em,
void *  data,
int  type 
)
static void EM_strip_selections ( EditMesh *  em) [static]
void EM_validate_selections ( EditMesh *  em)
int EM_view3d_poll ( bContext *  C)
EditFace* exist_face ( EditMesh *  em,
EditVert *  v1,
EditVert *  v2,
EditVert *  v3,
EditVert *  v4 
)
short extrudeflag ( Object *  obedit,
EditMesh *  em,
short  flag,
float *  nor,
int  all 
)
static short extrudeflag_edge ( Object *  obedit,
EditMesh *  em,
short   UNUSEDflag,
float *  nor,
int  all 
) [static]
short extrudeflag_edges_indiv ( EditMesh *  em,
short  flag,
float *  nor 
)
short extrudeflag_face_indiv ( EditMesh *  em,
short   UNUSEDflag,
float *  UNUSEDnor 
)
short extrudeflag_vert ( Object *  obedit,
EditMesh *  em,
short  flag,
float *  nor,
int  all 
)
short extrudeflag_verts_indiv ( EditMesh *  em,
short  flag,
float *  UNUSEDnor 
)
int faceselectedAND ( EditFace *  efa,
int  flag 
)

Definition at line 484 of file editmesh_lib.c.

References EditVert::f, EditFace::v1, EditFace::v2, EditFace::v3, and EditFace::v4.

Referenced by extrudeflag_vert(), and fill_mesh().

int faceselectedOR ( EditFace *  efa,
int  flag 
)
void recalc_editnormals ( EditMesh *  em)
void rotateflag ( EditMesh *  em,
short  flag,
float *  cent,
float  rotmat[][3] 
)
static void set_edge_directions_f2 ( EditMesh *  em,
int  val 
) [static]
static void tag_edge_verts ( EditEdge *  eed) [static]

Definition at line 2635 of file editmesh_lib.c.

References EditVert::l, EditVert::tmp, EditEdge::v1, and EditEdge::v2.

Referenced by em_deselect_nth_edge().

static int tag_edge_verts_test ( EditEdge *  eed) [static]

Definition at line 2639 of file editmesh_lib.c.

References EditVert::l, EditVert::tmp, EditEdge::v1, and EditEdge::v2.

Referenced by em_deselect_nth_edge().

static void tag_face_edges ( EditFace *  efa) [static]
static int tag_face_edges_test ( EditFace *  efa) [static]
void translateflag ( EditMesh *  em,
short  flag,
float *  vec 
)
static void update_data_blocks ( EditMesh *  em,
CustomData *  olddata,
CustomData *  data 
) [static]