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:
authorTon Roosendaal <ton@blender.org>2006-06-21 14:02:47 +0400
committerTon Roosendaal <ton@blender.org>2006-06-21 14:02:47 +0400
commit985db6c4efedb2945ac082789eb872810a26d092 (patch)
treec563b0e6042ea7b812b92b77655b62d7a230a281 /source/blender/blenkernel/intern/curve.c
parentf28a1b438a8e322a2f0f7042ce9f0df730ea9c5f (diff)
Bugfix #4367
Creating texture coordinates for Curve bevels didn't allocate a correct sized memory block when both U and V directions of a bevel are circular. This will also fix "UV orco" for such curves (like donut shapes).
Diffstat (limited to 'source/blender/blenkernel/intern/curve.c')
-rw-r--r--source/blender/blenkernel/intern/curve.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 0ae3249d435..7e157c834c4 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -1003,21 +1003,26 @@ float *make_orco_curve(Object *ob)
remakeDisp = 1;
}
- /* Assumes displist has been built */
+ /* Assumes displist has been built */
numVerts = 0;
for (dl=cu->disp.first; dl; dl=dl->next) {
if (dl->type==DL_INDEX3) {
numVerts += dl->nr;
} else if (dl->type==DL_SURF) {
- numVerts += dl->parts*dl->nr;
- if (dl->flag & DL_CYCL_U)
- numVerts+= dl->parts;
+ /* convertblender.c uses the Surface code for creating renderfaces when cyclic U only (closed circle beveling) */
+ if (dl->flag & DL_CYCL_U) {
+ if (dl->flag & DL_CYCL_V)
+ numVerts += (dl->parts+1)*(dl->nr+1);
+ else
+ numVerts += dl->parts*(dl->nr+1);
+ }
+ else
+ numVerts += dl->parts*dl->nr;
}
}
fp= orco= MEM_mallocN(3*sizeof(float)*numVerts, "cu_orco");
-
for (dl=cu->disp.first; dl; dl=dl->next) {
if (dl->type==DL_INDEX3) {
for (u=0; u<dl->nr; u++, fp+=3) {
@@ -1034,12 +1039,16 @@ float *make_orco_curve(Object *ob)
}
}
} else if (dl->type==DL_SURF) {
- int sizeu= dl->nr;
+ int sizeu= dl->nr, sizev= dl->parts;
- if (dl->flag & DL_CYCL_U)
+ /* exception as handled in convertblender.c too */
+ if (dl->flag & DL_CYCL_U) {
sizeu++;
-
- for (u=0; u<dl->parts; u++) {
+ if (dl->flag & DL_CYCL_V)
+ sizev++;
+ }
+
+ for (u=0; u<sizev; u++) {
for (v=0; v<sizeu; v++,fp+=3) {
if (cu->flag & CU_UV_ORCO) {
fp[0]= 2.0f*u/(dl->parts-1) - 1.0f;