81 if (dl->type ==
type) {
104 float *vdata, *ndata,
nor[3];
105 float *
v1, *
v2, *v3, *v4;
106 float *n1, *n2, *n3, *n4;
107 int a,
b, p1, p2, p3, p4;
111 if (dl->nors ==
nullptr) {
112 dl->nors = (
float *)
MEM_callocN(
sizeof(
float[3]), __func__);
122 else if (dl->type ==
DL_SURF) {
123 if (dl->nors ==
nullptr) {
124 dl->nors = (
float *)
MEM_callocN(
sizeof(
float[3]) * dl->nr * dl->parts, __func__);
129 for (
a = 0;
a < dl->parts;
a++) {
144 for (;
b < dl->nr;
b++) {
162 a = dl->parts * dl->nr;
184 int segments_u = dl->nr - (cyclic_u ==
false);
185 int segments_v = dl->parts - (cyclic_v ==
false);
186 vert_tot = dl->nr * dl->parts;
187 face_tot = segments_u * segments_v;
188 tri_tot = face_tot * 2;
193 face_tot = dl->parts;
199 face_tot = dl->parts;
200 tri_tot = face_tot * 2;
205 vert_tot = dl->nr * dl->parts;
210 *totvert += vert_tot;
211 *totface += face_tot;
217 const DispList *dl,
int a,
int *
b,
int *p1,
int *p2,
int *p3,
int *p4)
225 (*p2) = (*p1) + dl->
nr - 1;
226 (*p3) = (*p1) + dl->
nr;
227 (*p4) = (*p2) + dl->
nr;
233 (*p4) = (*p2) + dl->
nr;
234 (*p3) = (*p1) + dl->
nr;
247 #ifdef __INTEL_COMPILER
249 # pragma intel optimization_level 1
254 const bool for_render,
260 if (nu->hide != 0 && editmode) {
269 const BezTriple *bezt_first = &nu->bezt[0];
270 const BezTriple *bezt_last = &nu->bezt[nu->pntsu - 1];
274 for (
int i = 1; i < nu->pntsu; i++) {
275 const BezTriple *prevbezt = &nu->bezt[i - 1];
281 samples_len += resolution;
290 samples_len += resolution;
301 const bool use_cyclic_sample =
is_cyclic && (samples_len != 2);
303 DispList *dl = MEM_cnew<DispList>(__func__);
305 dl->verts = (
float *)
MEM_mallocN(
sizeof(
float[3]) * (samples_len + 1), __func__);
308 dl->nr = samples_len;
309 dl->col = nu->mat_nr;
310 dl->charidx = nu->charidx;
314 float *
data = dl->verts;
315 for (
int i = 1; i < nu->pntsu; i++) {
316 const BezTriple *prevbezt = &nu->bezt[i - 1];
324 for (
int j = 0; j < 3; j++) {
333 data += 3 * resolution;
341 for (
int j = 0; j < 3; j++) {
343 bezt_last->vec[2][j],
344 bezt_first->vec[0][j],
345 bezt_first->vec[1][j],
358 DispList *dl = MEM_cnew<DispList>(__func__);
363 dl->
col = nu->mat_nr;
369 else if (nu->type ==
CU_POLY) {
370 const int len = nu->pntsu;
371 DispList *dl = MEM_cnew<DispList>(__func__);
376 dl->
col = nu->mat_nr;
381 for (
int i = 0; i <
len; i++) {
382 const BPoint *bp = &nu->bp[i];
391 const float normal_proj[3],
392 const bool flip_normal)
394 if (dispbase ==
nullptr) {
408 bool should_continue =
true;
409 while (should_continue) {
410 should_continue =
false;
411 bool nextcol =
false;
417 short dl_flag_accum = 0;
418 short dl_rt_accum = 0;
421 if (charidx < dl->charidx) {
422 should_continue =
true;
424 else if (charidx == dl->charidx) {
425 if (colnr == dl->col) {
433 for (
int i = 0; i < dl->nr; i++) {
434 sf_vert_last = sf_vert;
437 if (sf_vert_last ==
nullptr) {
438 sf_vert_new = sf_vert;
445 if (sf_vert !=
nullptr && sf_vert_new !=
nullptr) {
449 else if (colnr < dl->
col) {
451 should_continue =
true;
455 dl_flag_accum |= dl->flag;
456 dl_rt_accum |= dl->rt;
461 if (totvert != 0 && triangles_len != 0) {
462 DispList *dlnew = MEM_cnew<DispList>(__func__);
468 dlnew->
parts = triangles_len;
470 dlnew->
index = (
int *)
MEM_mallocN(
sizeof(
int[3]) * triangles_len, __func__);
481 int *index = dlnew->
index;
483 index[0] = sf_tri->v1->tmp.i;
484 index[1] = flip_normal ? sf_tri->v3->tmp.i : sf_tri->v2->tmp.i;
485 index[2] = flip_normal ? sf_tri->v2->tmp.i : sf_tri->v3->tmp.i;
510 ListBase front = {
nullptr,
nullptr};
517 DispList *dlnew = MEM_cnew<DispList>(__func__);
519 dlnew->
verts = (
float *)
MEM_mallocN(
sizeof(
float[3]) * dl->parts, __func__);
520 dlnew->
nr = dl->parts;
524 dlnew->
col = dl->col;
527 const float *old_verts = dl->verts;
528 float *new_verts = dlnew->
verts;
529 for (
int i = 0; i < dl->parts; i++) {
532 old_verts += 3 * dl->nr;
536 DispList *dlnew = MEM_cnew<DispList>(__func__);
538 dlnew->
verts = (
float *)
MEM_mallocN(
sizeof(
float[3]) * dl->parts, __func__);
539 dlnew->
nr = dl->parts;
543 dlnew->
col = dl->col;
546 const float *old_verts = dl->verts + 3 * (dl->nr - 1);
547 float *new_verts = dlnew->
verts;
548 for (
int i = 0; i < dl->parts; i++) {
551 old_verts += 3 * dl->nr;
558 const float z_up[3] = {0.0f, 0.0f, -1.0f};
578 const float z_up[3] = {0.0f, 0.0f, -1.0f};
610 dx = dl->
verts[3 * (dl->
nr - 1)] - minx;
613 for (
a = 0;
a < dl->
nr;
a++, fp += 3) {
614 if ((fp[0] - minx) / dx >= fac) {
617 float fac1 = (fp[-3] - minx) / dx;
618 float fac2 = (fp[0] - minx) / dx;
620 return fp[1] * (fac1 - fac) / (fac1 - fac2) + fp[-2] * (fac - fac2) / (fac1 - fac2);
636 const float fac = ((
float)cur) / (
float)(tot - 1);
664 const bool for_render,
676 for (; md; md = md->
next) {
683 return pretessellatePoint;
687 pretessellatePoint = md;
695 pretessellatePoint = md;
699 return pretessellatePoint;
707 const bool for_render)
727 float *keyVerts =
nullptr;
728 float(*deformedVerts)[3] =
nullptr;
748 if (pretessellatePoint) {
761 if (!deformedVerts) {
765 mti->
deformVerts(md, &mectx,
nullptr, deformedVerts, numVerts);
767 if (md == pretessellatePoint) {
818 for (; md; md = md->
next) {
834 const bool for_render)
838 const bool use_cache = !for_render;
858 pretessellatePoint->
next;
870 for (; md; md = md->
next) {
895 if (
mesh != output_mesh) {
915 int b, p1, p2, p3, p4;
922 for (
int a = 0;
a < dl->
parts;
a++) {
928 for (;
b < dl->
nr;
b++, index += 4) {
947 const bool for_render,
972 if (nu->pntsv == 1) {
975 DispList *dl = MEM_cnew<DispList>(__func__);
981 dl->
col = nu->mat_nr;
996 const int len = (nu->pntsu * resolu) * (nu->pntsv * resolv);
998 DispList *dl = MEM_cnew<DispList>(__func__);
1002 dl->
col = nu->mat_nr;
1009 dl->
parts = (nu->pntsu * resolu);
1010 dl->
nr = (nu->pntsv * resolv);
1031 return geometry_set;
1038 const float bev_blend,
1040 const float radius_factor,
1043 float *
data = *r_data;
1044 const float *fp = dlb->
verts;
1045 for (
int b = 0;
b < dlb->
nr;
b++, fp += 3,
data += 3) {
1047 float vec[3], quat[4];
1049 vec[0] = fp[1] + widfac;
1053 if (nbevp ==
nullptr) {
1064 data[0] += radius_factor * vec[0];
1065 data[1] += radius_factor * vec[1];
1066 data[2] += radius_factor * vec[2];
1071 if (nbevp ==
nullptr) {
1082 sina = nbevp->
sina * bev_blend + bevp->
sina * (1.0f - bev_blend);
1083 cosa = nbevp->
cosa * bev_blend + bevp->
cosa * (1.0f - bev_blend);
1086 data[0] += radius_factor * (widfac + fp[1]) * sina;
1087 data[1] += radius_factor * (widfac + fp[1]) * cosa;
1088 data[2] += radius_factor * fp[2];
1097 const float *prev_fp,
1100 DispList *dl = MEM_cnew<DispList>(__func__);
1102 memcpy(dl->
verts, prev_fp,
sizeof(
float[3]) * dlb->
nr);
1116 const BevList *bl,
float bevfac,
float spline_length,
int *r_bev,
float *r_blend)
1118 float normsum = 0.0f;
1119 float *seglen = bl->
seglen;
1121 int bevcount = 0, nr = bl->
nr;
1123 float bev_fl = bevfac * (bl->
nr - 1);
1124 *r_bev = (int)bev_fl;
1126 while (bevcount < nr - 1) {
1127 float normlen = *seglen / spline_length;
1128 if (normsum + normlen > bevfac) {
1129 bev_fl = bevcount + (bevfac - normsum) / normlen * *segbevcount;
1130 *r_bev = (int)bev_fl;
1131 *r_blend = bev_fl - *r_bev;
1135 bevcount += *segbevcount;
1142 const BevList *bl,
float bevfac,
float spline_length,
int *r_bev,
float *r_blend)
1144 const float len_target = bevfac * spline_length;
1146 float len_next = 0.0f,
len = 0.0f;
1147 int i = 0, nr = bl->
nr;
1152 if (len_next > len_target) {
1160 *r_blend = (len_target -
len) / bevp->
offset;
1164 const BevList *bl,
int *r_start,
float *r_firstblend,
int *r_steps,
float *r_lastblend)
1168 *r_firstblend = 1.0f;
1169 *r_lastblend = 1.0f;
1176 float *r_firstblend,
1180 float tmpf, total_length = 0.0f;
1193 total_length += bl->
seglen[i];
1199 const float start_fl = cu->
bevfac1 * (bl->
nr - 1);
1200 *r_start = (int)start_fl;
1201 *r_firstblend = 1.0f - (start_fl - (*r_start));
1206 *r_firstblend = 1.0f - *r_firstblend;
1211 *r_firstblend = 1.0f - *r_firstblend;
1218 const float end_fl = cu->
bevfac2 * (bl->
nr - 1);
1221 *r_steps = 2 + end - *r_start;
1222 *r_lastblend = end_fl - end;
1227 *r_steps = end - *r_start + 2;
1232 *r_steps = end - *r_start + 2;
1237 if (end < *r_start || (end == *r_start && *r_lastblend < 1.0f - *r_firstblend)) {
1238 SWAP(
int, *r_start, end);
1239 tmpf = *r_lastblend;
1240 *r_lastblend = 1.0f - *r_firstblend;
1241 *r_firstblend = 1.0f - tmpf;
1242 *r_steps = end - *r_start + 2;
1245 if (*r_start + *r_steps > bl->
nr) {
1246 *r_steps = bl->
nr - *r_start;
1247 *r_lastblend = 1.0f;
1254 const bool for_render,
1286 const float widfac = cu->
offset - 1.0f;
1289 const Nurb *nu = (
Nurb *)deformed_nurbs->first;
1290 for (; bl && nu; bl = bl->
next, nu = nu->
next) {
1299 DispList *dl = MEM_cnew<DispList>(
"makeDispListbev");
1303 if (bl->
poly != -1) {
1313 dl->
col = nu->mat_nr;
1329 ListBase bottom_capbase = {
nullptr,
nullptr};
1330 ListBase top_capbase = {
nullptr,
nullptr};
1331 float bottom_no[3] = {0.0f};
1332 float top_no[3] = {0.0f};
1333 float first_blend = 0.0f, last_blend = 0.0f;
1334 int start,
steps = 0;
1349 DispList *dl = MEM_cnew<DispList>(__func__);
1365 dl->
col = nu->mat_nr;
1373 for (
int i = start,
a = 0;
a <
steps; i++, bevp++,
a++) {
1374 float radius_factor = 1.0;
1375 float *cur_data =
data;
1378 radius_factor = bevp->
radius;
1383 float len = (
steps - 3) + first_blend + last_blend;
1386 taper_factor = 0.0f;
1388 else if (
a ==
steps - 1) {
1389 taper_factor = 1.0f;
1392 taper_factor = ((
float)
a - (1.0f - first_blend)) /
len;
1396 float len = bl->
nr - 1;
1400 taper_factor += (1.0f - first_blend) /
len;
1402 else if (
a ==
steps - 1) {
1403 taper_factor -= (1.0f - last_blend) /
len;
1410 radius_factor *= bevp->
radius;
1413 radius_factor += bevp->
radius;
1418 if ((
a == 0) && (bevp != bevp_last)) {
1420 cu, bevp, bevp + 1, dlb, 1.0f - first_blend, widfac, radius_factor, &
data);
1422 else if ((
a ==
steps - 1) && (bevp != bevp_first)) {
1424 cu, bevp, bevp - 1, dlb, 1.0f - last_blend, widfac, radius_factor, &
data);
1432 fillBevelCap(nu, dlb, cur_data - 3 * dlb->nr, &bottom_capbase);
1446 if (bottom_capbase.
first) {
1465 const bool for_render)
1473 const Curve &original_curve = *
static_cast<const Curve *
>(ob->
data);
1499 Curve &cow_curve = *
reinterpret_cast<Curve *
>(
typedef float(TangentPoint)[2]
void BKE_anim_path_calc_data(struct Object *ob)
float(* BKE_curve_nurbs_vert_coords_alloc(const struct ListBase *lb, int *r_vert_len))[3]
void BKE_curve_bevelList_make(struct Object *ob, const struct ListBase *nurbs, bool for_render)
ListBase BKE_curve_bevel_make(const struct Curve *curve)
const struct ListBase * BKE_curve_editNurbs_get_for_read(const struct Curve *cu)
void BKE_nurb_makeFaces(const struct Nurb *nu, float *coord_array, int rowstride, int resolu, int resolv)
bool BKE_nurb_check_valid_u(const struct Nurb *nu)
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride)
void BKE_nurb_makeCurve(const struct Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, float *weight_array, int resolu, int stride)
void BKE_nurbList_duplicate(struct ListBase *lb1, const struct ListBase *lb2)
const ListBase * BKE_curve_nurbs_get_for_read(const struct Curve *cu)
void BKE_curve_nurbs_key_vert_tilts_apply(struct ListBase *lb, const float *key)
bool BKE_nurb_check_valid_uv(const struct Nurb *nu)
void BKE_curve_nurbs_vert_coords_apply(struct ListBase *lb, const float(*vert_coords)[3], bool constrain_2d)
float(* BKE_curve_nurbs_key_vert_coords_alloc(const struct ListBase *lb, float *key, int *r_vert_len))[3]
display list (or rather multi purpose list) stuff.
float * BKE_key_evaluate_object(struct Object *ob, int *r_totelem)
int BKE_keyblock_curve_element_count(const struct ListBase *nurb)
bool object_deform_mball(struct Object *ob, struct ListBase *dispbase)
struct ID * BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, int flag)
struct Object * BKE_mball_basis_find(struct Scene *scene, struct Object *ob)
void BKE_mball_texspace_calc(struct Object *ob)
void BKE_mball_polygonize(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct ListBase *dispbase)
struct Mesh * BKE_mesh_new_nomain_from_curve_displist(const struct Object *ob, const struct ListBase *dispbase)
void BKE_mesh_vert_coords_apply(struct Mesh *mesh, const float(*vert_coords)[3])
struct Mesh * BKE_mesh_new_nomain(int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len)
float(* BKE_mesh_vert_coords_alloc(const struct Mesh *mesh, int *r_vert_len))[3]
void BKE_mesh_ensure_normals_for_display(struct Mesh *mesh)
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
bool BKE_modifier_is_enabled(const struct Scene *scene, struct ModifierData *md, int required_mode)
struct ModifierData * BKE_modifiers_get_virtual_modifierlist(const struct Object *ob, struct VirtualModifierData *data)
@ eModifierTypeType_OnlyDeform
@ eModifierTypeType_Constructive
void BKE_modifiers_clear_errors(struct Object *ob)
General operations, lookup, etc. for blender objects.
void BKE_object_free_derived_caches(struct Object *ob)
bool BKE_object_boundbox_calc_from_evaluated_geometry(struct Object *ob)
void BKE_object_eval_assign_data(struct Object *object, struct ID *data, bool is_owned)
bool BKE_vfont_to_curve_nubase(struct Object *ob, int mode, struct ListBase *r_nubase)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void * BLI_pophead(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
float normal_quad_v3(float n[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
void interp_qt_qtqt(float q[4], const float a[4], const float b[4], float t)
void mul_qt_v3(const float q[4], float r[3])
void copy_qt_qt(float q[4], const float a[4])
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
MINLINE float normalize_v3(float r[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void negate_v3_v3(float r[3], const float a[3])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
MINLINE void zero_v3(float r[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
void BLI_memarena_free(struct MemArena *ma) ATTR_NONNULL(1)
struct MemArena * BLI_memarena_new(size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(2) ATTR_MALLOC
struct ScanFillVert * BLI_scanfill_vert_add(ScanFillContext *sf_ctx, const float vec[3])
struct ScanFillEdge * BLI_scanfill_edge_add(ScanFillContext *sf_ctx, struct ScanFillVert *v1, struct ScanFillVert *v2)
void BLI_scanfill_begin_arena(ScanFillContext *sf_ctx, struct MemArena *arena)
unsigned int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, int flag, const float nor_proj[3])
#define BLI_SCANFILL_ARENA_SIZE
void BLI_scanfill_end_arena(ScanFillContext *sf_ctx, struct MemArena *arena)
@ BLI_SCANFILL_CALC_POLYS
@ BLI_SCANFILL_CALC_HOLES
@ BLI_SCANFILL_CALC_REMOVE_DOUBLES
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
struct Depsgraph Depsgraph
@ DAG_EVAL_NEED_CURVE_PATH
uint32_t DEG_get_eval_flags_for_id(const struct Depsgraph *graph, const struct ID *id)
@ CU_TAPER_RADIUS_MULTIPLY
@ eModifierMode_ApplyOnSpline
@ eModifierType_MeshDeform
Object is a sort of wrapper for general info.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
ATTR_WARN_UNUSED_RESULT const BMVert * v2
const Depsgraph * depsgraph
static GeometrySet evaluate_surface_object(Depsgraph *depsgraph, const Scene *scene, Object *ob, const bool for_render, ListBase *r_dispbase)
static void displist_surf_indices(DispList *dl)
static bool do_curve_implicit_mesh_conversion(const Curve *curve, ModifierData *first_modifier, const Scene *scene, const ModifierMode required_mode)
static void curve_to_filledpoly(const Curve *cu, ListBase *dispbase)
static void bevels_to_filledpoly(const Curve *cu, ListBase *dispbase)
void BKE_displist_normals_add(ListBase *lb)
float BKE_displist_calc_taper(Depsgraph *depsgraph, const Scene *scene, Object *taperobj, int cur, int tot)
static float displist_calc_taper(Depsgraph *depsgraph, const Scene *scene, Object *taperobj, float fac)
void BKE_displist_make_curveTypes(Depsgraph *depsgraph, const Scene *scene, Object *ob, const bool for_render)
void BKE_displist_fill(const ListBase *dispbase, ListBase *to, const float normal_proj[3], const bool flip_normal)
static void calc_bevfac_mapping_default(const BevList *bl, int *r_start, float *r_firstblend, int *r_steps, float *r_lastblend)
static void calc_bevfac_spline_mapping(const BevList *bl, float bevfac, float spline_length, int *r_bev, float *r_blend)
static void rotateBevelPiece(const Curve *cu, const BevPoint *bevp, const BevPoint *nbevp, const DispList *dlb, const float bev_blend, const float widfac, const float radius_factor, float **r_data)
void BKE_displist_copy(ListBase *lbn, const ListBase *lb)
static void calc_bevfac_mapping(const Curve *cu, const BevList *bl, const Nurb *nu, int *r_start, float *r_firstblend, int *r_steps, float *r_lastblend)
static void displist_elem_free(DispList *dl)
bool BKE_displist_surfindex_get(const DispList *dl, int a, int *b, int *p1, int *p2, int *p3, int *p4)
static void fillBevelCap(const Nurb *nu, const DispList *dlb, const float *prev_fp, ListBase *dispbase)
void BKE_displist_count(const ListBase *lb, int *totvert, int *totface, int *tottri)
void BKE_displist_free(ListBase *lb)
void BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph, const Scene *scene, Object *ob, ListBase *source_nurb, ListBase *target_nurb, const bool for_render)
void BKE_displist_make_mball(Depsgraph *depsgraph, Scene *scene, Object *ob)
DispList * BKE_displist_find(ListBase *lb, int type)
static void calc_bevfac_segment_mapping(const BevList *bl, float bevfac, float spline_length, int *r_bev, float *r_blend)
static GeometrySet evaluate_curve_type_object(Depsgraph *depsgraph, const Scene *scene, Object *ob, const bool for_render, ListBase *r_dispbase)
static GeometrySet curve_calc_modifiers_post(Depsgraph *depsgraph, const Scene *scene, Object *ob, const ListBase *dispbase, const bool for_render)
static ModifierData * curve_get_tessellate_point(const Scene *scene, const Object *ob, const bool for_render, const bool editmode)
static void curve_to_displist(const Curve *cu, const ListBase *nubase, const bool for_render, ListBase *r_dispbase)
void BKE_displist_minmax(const ListBase *dispbase, float min[3], float max[3])
static bool is_cyclic(const Nurb *nu)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
Curves * curve_legacy_to_curves(const Curve &curve_legacy)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
char edit_data_from_original
const struct Curves * curve_eval
struct EditFont * editfont
void replace_mesh(Mesh *mesh, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
void replace_curves(Curves *curves, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
const Curves * get_curves_for_read() const
Mesh * get_mesh_for_write()
struct ModifierData * next
void(* modifyGeometrySet)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct GeometrySet *geometry_set)
struct Mesh *(* modifyMesh)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct Mesh *mesh)
void(* deformVerts)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct Mesh *mesh, float(*vertexCos)[3], int numVerts)
struct CurveCache * curve_cache
struct GeometrySet * geometry_set_eval