Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/curve.c
| Show First 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
| fp[0] = 0.0; | fp[0] = 0.0; | ||||
| fp[1] = (cosf(angle) * (cu->ext2)); | fp[1] = (cosf(angle) * (cu->ext2)); | ||||
| fp[2] = (sinf(angle) * (cu->ext2)) - cu->ext1; | fp[2] = (sinf(angle) * (cu->ext2)) - cu->ext1; | ||||
| angle += dangle; | angle += dangle; | ||||
| fp += 3; | fp += 3; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| short dnr; | /* The general case for nonzero extrusion or an incomplete loop. */ | ||||
| /* bevel now in three parts, for proper vertex normals */ | if ((cu->flag & (CU_FRONT | CU_BACK)) == 0) { | ||||
| /* part 1, back */ | /* The full loop. */ | ||||
| nr = 4 * cu->bevresol + 6; | |||||
| if ((cu->flag & CU_BACK) || !(cu->flag & CU_FRONT)) { | dl->flag = DL_FRONT_CURVE | DL_BACK_CURVE; | ||||
mano-wiiUnsubmitted Done Inline Actionsmano-wii: ```
Warning C4700 uninitialized local variable 'dl' used
``` | |||||
| dnr = nr = 2 + cu->bevresol; | } | ||||
| if ((cu->flag & (CU_FRONT | CU_BACK)) == 0) { | else if ((cu->flag & CU_FRONT) && (cu->flag & CU_BACK)) { | ||||
| nr = 3 + 2 * cu->bevresol; | /* Half the loop. */ | ||||
| } | nr = 2 * (cu->bevresol + 1) + ((cu->ext1 == 0.0f) ? 1 : 2); | ||||
| dl = MEM_callocN(sizeof(DispList), "makebevelcurve p1"); | dl->flag = DL_FRONT_CURVE | DL_BACK_CURVE; | ||||
| dl->verts = MEM_malloc_arrayN(nr, sizeof(float[3]), "makebevelcurve p1"); | } | ||||
| BLI_addtail(disp, dl); | else { | ||||
| dl->type = DL_SEGM; | /* One quarter of the loop (just front or back). */ | ||||
| dl->parts = 1; | nr = (cu->ext1 == 0.0f) ? cu->bevresol + 2 : cu->bevresol + 3; | ||||
| dl->flag = DL_BACK_CURVE; | dl->flag = (cu->flag & CU_FRONT) ? DL_FRONT_CURVE : DL_BACK_CURVE; | ||||
mano-wiiUnsubmitted Done Inline ActionsWarning C6001 Using uninitialized memory 'dl'. mano-wii: ```
Warning C6001 Using uninitialized memory 'dl'.
``` | |||||
| dl->nr = nr; | } | ||||
| /* half a circle */ | dl = MEM_callocN(sizeof(DispList), "makebevelcurve"); | ||||
| fp = dl->verts; | dl->verts = MEM_malloc_arrayN(nr, sizeof(float[3]), "makebevelcurve"); | ||||
| dangle = ((float)M_PI_2 / (dnr - 1)); | BLI_addtail(disp, dl); | ||||
| angle = -(nr - 1) * dangle; | /* Use a different type depending on whether the loop is complete or not. */ | ||||
| dl->type = ((cu->flag & (CU_FRONT | CU_BACK)) == 0) ? DL_POLY : DL_SEGM; | |||||
| for (a = 0; a < nr; a++) { | dl->parts = 1; | ||||
| dl->nr = nr; | |||||
| fp = dl->verts; | |||||
| dangle = (float)M_PI_2 / (cu->bevresol + 1); | |||||
| /* Build the back section. */ | |||||
| if (cu->flag & CU_BACK || !(cu->flag & (CU_FRONT | CU_BACK))) { | |||||
Not Done Inline ActionsThese bitwise operations are a bit confusing. In my opinion, this makes it easier to understand: if (cu->flag & CU_BACK || !(cu->flag & CU_FRONT)) {But I may be missing something. This is not very important. mano-wii: These bitwise operations are a bit confusing.
For example, in this case, the `CU_BACK` flag… | |||||
Done Inline ActionsI agree they are confusing, your suggestion of not checking flags that were already checked cleaned it up a bit. HooglyBoogly: I agree they are confusing, your suggestion of not checking flags that were already checked… | |||||
| angle = (float)M_PI_2 * 3.0f; | |||||
| for (a = 0; a < cu->bevresol + 2; a++) { | |||||
| fp[0] = 0.0; | fp[0] = 0.0; | ||||
| fp[1] = (float)(cosf(angle) * (cu->ext2)); | fp[1] = (float)cosf(angle) * cu->ext2; | ||||
mano-wiiUnsubmitted Done Inline ActionsWarning C4701 potentially uninitialized local variable 'angle' used mano-wii: ```
Warning C4701 potentially uninitialized local variable 'angle' used
```
| |||||
| fp[2] = (float)(sinf(angle) * (cu->ext2)) - cu->ext1; | fp[2] = (float)sinf(angle) * cu->ext2 - cu->ext1; | ||||
Done Inline ActionsChanges to parenthesis here (and elsewhere) lower the precision of operations (so the multiplication is done on floats instead of doubles), although it's unlikely to cause issues, prefer to keep this as is since it's not the purpose of this patch to make these kinds of changes. campbellbarton: Changes to parenthesis here (and elsewhere) lower the precision of operations (so the… | |||||
| angle += dangle; | angle += dangle; | ||||
| fp += 3; | fp += 3; | ||||
| } | } | ||||
| if ((cu->ext1 != 0.0f) && !(cu->flag & CU_FRONT) && (cu->flag & (CU_FRONT | CU_BACK))) { | |||||
| /* Add the extrusion if we're only building the back. */ | |||||
| fp[0] = 0.0; | |||||
| fp[1] = cu->ext2; | |||||
| fp[2] = cu->ext1; | |||||
| } | |||||
| } | } | ||||
| /* part 2, sidefaces */ | /* Build the front section. */ | ||||
| if (cu->ext1 != 0.0f) { | if (cu->flag & CU_FRONT || !(cu->flag & (CU_FRONT | CU_BACK))) { | ||||
| nr = 2; | if ((cu->ext1 != 0.0f) && !(cu->flag & CU_BACK) && (cu->flag & (CU_FRONT | CU_BACK))) { | ||||
| /* Add the extrusion if we're only building the back. */ | |||||
| dl = MEM_callocN(sizeof(DispList), "makebevelcurve p2"); | fp[0] = 0.0; | ||||
| dl->verts = MEM_malloc_arrayN(nr, sizeof(float[3]), "makebevelcurve p2"); | fp[1] = cu->ext2; | ||||
| BLI_addtail(disp, dl); | fp[2] = -cu->ext1; | ||||
| dl->type = DL_SEGM; | fp += 3; | ||||
| dl->parts = 1; | } | ||||
| dl->nr = nr; | /* Don't duplicate the last back vertex. */ | ||||
| angle = (cu->ext1 == 0.0f && (cu->flag & CU_BACK)) ? dangle : 0; | |||||
| fp = dl->verts; | for (a = 0; a < cu->bevresol + 2; a++) { | ||||
| fp[1] = cu->ext2; | fp[0] = 0.0; | ||||
| fp[2] = -cu->ext1; | fp[1] = (float)cosf(angle) * cu->ext2; | ||||
| fp[4] = cu->ext2; | fp[2] = (float)sinf(angle) * cu->ext2 + cu->ext1; | ||||
| fp[5] = cu->ext1; | angle += dangle; | ||||
| fp += 3; | |||||
| if ((cu->flag & (CU_FRONT | CU_BACK)) == 0) { | |||||
| dl = MEM_dupallocN(dl); | |||||
| dl->verts = MEM_dupallocN(dl->verts); | |||||
| BLI_addtail(disp, dl); | |||||
| fp = dl->verts; | |||||
| fp[1] = -fp[1]; | |||||
| fp[2] = -fp[2]; | |||||
| fp[4] = -fp[4]; | |||||
| fp[5] = -fp[5]; | |||||
| } | } | ||||
| } | } | ||||
| /* part 3, front */ | /* Build the other half only if we're building the full loop. */ | ||||
| if ((cu->flag & CU_FRONT) || !(cu->flag & CU_BACK)) { | if (!(cu->flag & (CU_FRONT | CU_BACK))) { | ||||
| dnr = nr = 2 + cu->bevresol; | for (a = 0; a < cu->bevresol + 1; a++) { | ||||
| if ((cu->flag & (CU_FRONT | CU_BACK)) == 0) { | fp[0] = 0.0; | ||||
| nr = 3 + 2 * cu->bevresol; | fp[1] = (float)cosf(angle) * cu->ext2; | ||||
| fp[2] = (float)sinf(angle) * cu->ext2 + cu->ext1; | |||||
| angle += dangle; | |||||
| fp += 3; | |||||
| } | } | ||||
| dl = MEM_callocN(sizeof(DispList), "makebevelcurve p3"); | |||||
| dl->verts = MEM_malloc_arrayN(nr, sizeof(float[3]), "makebevelcurve p3"); | |||||
| BLI_addtail(disp, dl); | |||||
| dl->type = DL_SEGM; | |||||
| dl->flag = DL_FRONT_CURVE; | |||||
| dl->parts = 1; | |||||
| dl->nr = nr; | |||||
| /* half a circle */ | |||||
| fp = dl->verts; | |||||
| angle = 0.0; | |||||
| dangle = ((float)M_PI_2 / (dnr - 1)); | |||||
| for (a = 0; a < nr; a++) { | angle = (float)M_PI; | ||||
| for (a = 0; a < cu->bevresol + 1; a++) { | |||||
| fp[0] = 0.0; | fp[0] = 0.0; | ||||
| fp[1] = (float)(cosf(angle) * (cu->ext2)); | fp[1] = (float)cosf(angle) * cu->ext2; | ||||
| fp[2] = (float)(sinf(angle) * (cu->ext2)) + cu->ext1; | fp[2] = (float)sinf(angle) * cu->ext2 - cu->ext1; | ||||
| angle += dangle; | angle += dangle; | ||||
| fp += 3; | fp += 3; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static int cu_isectLL(const float v1[3], | static int cu_isectLL(const float v1[3], | ||||
| ▲ Show 20 Lines • Show All 92 Lines • Show Last 20 Lines | |||||