Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/transform/transform_convert_paintcurve.c
| Show All 26 Lines | |||||
| #include "BLI_math.h" | #include "BLI_math.h" | ||||
| #include "BKE_context.h" | #include "BKE_context.h" | ||||
| #include "BKE_paint.h" | #include "BKE_paint.h" | ||||
| #include "transform.h" | #include "transform.h" | ||||
| #include "transform_convert.h" | #include "transform_convert.h" | ||||
| #include "transform_data.h" | |||||
| typedef struct TransDataPaintCurve { | typedef struct TransDataPaintCurve { | ||||
| struct PaintCurvePoint *pcp; /* initial curve point */ | struct PaintCurvePoint *pcp; /* initial curve point */ | ||||
| char id; | char id; | ||||
| } TransDataPaintCurve; | } TransDataPaintCurve; | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Paint Curve Transform Creation | /** \name Paint Curve Transform Creation | ||||
| * | * | ||||
| * \{ */ | * \{ */ | ||||
| #define PC_IS_ANY_SEL(pc) (((pc)->bez.f1 | (pc)->bez.f2 | (pc)->bez.f3) & SELECT) | #define PC_IS_ANY_SEL(pc) (((pc)->bez.f1 | (pc)->bez.f2 | (pc)->bez.f3) & SELECT) | ||||
| static void PaintCurveConvertHandle( | static void PaintCurveConvertHandle(PaintCurvePoint *pcp, | ||||
| PaintCurvePoint *pcp, int id, TransData2D *td2d, TransDataPaintCurve *tdpc, TransData *td) | BezTriple *bezt, | ||||
| int id, | |||||
| TransData2D *td2d, | |||||
| TransDataPaintCurve *tdpc, | |||||
| TransData *td, | |||||
| const int tdi) | |||||
| { | { | ||||
| BezTriple *bezt = &pcp->bez; | |||||
| copy_v2_v2(td2d->loc, bezt->vec[id]); | copy_v2_v2(td2d->loc, bezt->vec[id]); | ||||
| td2d->loc[2] = 0.0f; | td2d->loc[2] = 0.0f; | ||||
| td2d->loc2d = bezt->vec[id]; | td2d->loc2d = bezt->vec[id]; | ||||
| td->flag = 0; | |||||
| td->loc = td2d->loc; | |||||
| copy_v3_v3(td->center, bezt->vec[1]); | |||||
| copy_v3_v3(td->iloc, td->loc); | |||||
| memset(td->axismtx, 0, sizeof(td->axismtx)); | |||||
| td->axismtx[2][2] = 1.0f; | |||||
| td->ext = NULL; | |||||
| td->val = NULL; | |||||
| td->flag |= TD_SELECTED; | |||||
| td->dist = 0.0; | |||||
| unit_m3(td->mtx); | |||||
| unit_m3(td->smtx); | |||||
| tdpc->id = id; | tdpc->id = id; | ||||
| tdpc->pcp = pcp; | tdpc->pcp = pcp; | ||||
| td->basic[tdi].loc = td2d->loc; | |||||
| copy_v3_v3(td->basic[tdi].iloc, td2d->loc); | |||||
| copy_v3_v3(td->center[tdi], bezt->vec[1]); | |||||
| unit_m3(td->space[tdi].mtx); | |||||
| unit_m3(td->space[tdi].smtx); | |||||
| unit_m3(td->space[tdi].axismtx); | |||||
| td->basic[tdi].flag = TD_SELECTED; | |||||
| } | } | ||||
| static void PaintCurvePointToTransData(PaintCurvePoint *pcp, | static void PaintCurvePointToTransData( | ||||
| TransData *td, | PaintCurvePoint *pcp, TransData2D *td2d, TransDataPaintCurve *tdpc, TransData *td, int tdi) | ||||
| TransData2D *td2d, | |||||
| TransDataPaintCurve *tdpc) | |||||
| { | { | ||||
| BezTriple *bezt = &pcp->bez; | BezTriple *bezt = &pcp->bez; | ||||
| if (pcp->bez.f2 == SELECT) { | if (pcp->bez.f2 == SELECT) { | ||||
| int i; | for (int i = 0; i < 3; i++) { | ||||
| for (i = 0; i < 3; i++) { | PaintCurveConvertHandle(pcp, bezt, i, td2d, tdpc, td, tdi); | ||||
| copy_v2_v2(td2d->loc, bezt->vec[i]); | |||||
| td2d->loc[2] = 0.0f; | |||||
| td2d->loc2d = bezt->vec[i]; | |||||
| td->flag = 0; | |||||
| td->loc = td2d->loc; | |||||
| copy_v3_v3(td->center, bezt->vec[1]); | |||||
| copy_v3_v3(td->iloc, td->loc); | |||||
| memset(td->axismtx, 0, sizeof(td->axismtx)); | |||||
| td->axismtx[2][2] = 1.0f; | |||||
| td->ext = NULL; | |||||
| td->val = NULL; | |||||
| td->flag |= TD_SELECTED; | |||||
| td->dist = 0.0; | |||||
| unit_m3(td->mtx); | |||||
| unit_m3(td->smtx); | |||||
| tdpc->id = i; | tdi++; | ||||
| tdpc->pcp = pcp; | |||||
| td++; | |||||
| td2d++; | td2d++; | ||||
| tdpc++; | tdpc++; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| if (bezt->f3 & SELECT) { | if (bezt->f3 & SELECT) { | ||||
| PaintCurveConvertHandle(pcp, 2, td2d, tdpc, td); | PaintCurveConvertHandle(pcp, bezt, 2, td2d, tdpc, td, tdi); | ||||
| tdi++; | |||||
| td2d++; | td2d++; | ||||
| tdpc++; | tdpc++; | ||||
| td++; | |||||
| } | } | ||||
| if (bezt->f1 & SELECT) { | if (bezt->f1 & SELECT) { | ||||
| PaintCurveConvertHandle(pcp, 0, td2d, tdpc, td); | PaintCurveConvertHandle(pcp, bezt, 0, td2d, tdpc, td, tdi); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| void createTransPaintCurveVerts(bContext *C, TransInfo *t) | void createTransPaintCurveVerts(bContext *C, TransInfo *t) | ||||
| { | { | ||||
| Paint *paint = BKE_paint_get_active_from_context(C); | Paint *paint = BKE_paint_get_active_from_context(C); | ||||
| PaintCurve *pc; | PaintCurve *pc; | ||||
| PaintCurvePoint *pcp; | PaintCurvePoint *pcp; | ||||
| Brush *br; | Brush *br; | ||||
| TransData *td = NULL; | |||||
| TransData2D *td2d = NULL; | TransData2D *td2d = NULL; | ||||
| TransDataPaintCurve *tdpc = NULL; | TransDataPaintCurve *tdpc = NULL; | ||||
| int i; | int i; | ||||
| int total = 0; | int total = 0; | ||||
| TransDataContainer *tc = TRANS_DATA_CONTAINER_FIRST_SINGLE(t); | TransDataContainer *tc = TRANS_DATA_CONTAINER_FIRST_SINGLE(t); | ||||
| tc->data_len = 0; | tc->data_len = 0; | ||||
| Show All 21 Lines | if (PC_IS_ANY_SEL(pcp)) { | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (!total) { | if (!total) { | ||||
| return; | return; | ||||
| } | } | ||||
| tc->data_len = total; | TransData *td = tc->data = transform_data_alloc(tc->data_len, TD_BASIC_COMP); | ||||
| int tdi = 0; | |||||
| td2d = tc->data_2d = MEM_callocN(tc->data_len * sizeof(TransData2D), "TransData2D"); | td2d = tc->data_2d = MEM_callocN(tc->data_len * sizeof(TransData2D), "TransData2D"); | ||||
| td = tc->data = MEM_callocN(tc->data_len * sizeof(TransData), "TransData"); | tc->custom.type.data = tdpc = MEM_callocN(td->elem_len * sizeof(TransDataPaintCurve), | ||||
| tc->custom.type.data = tdpc = MEM_callocN(tc->data_len * sizeof(TransDataPaintCurve), | |||||
| "TransDataPaintCurve"); | "TransDataPaintCurve"); | ||||
| tc->custom.type.use_free = true; | tc->custom.type.use_free = true; | ||||
| for (pcp = pc->points, i = 0; i < pc->tot_points; i++, pcp++) { | for (pcp = pc->points, i = 0; i < pc->tot_points; i++, pcp++) { | ||||
| if (PC_IS_ANY_SEL(pcp)) { | if (PC_IS_ANY_SEL(pcp)) { | ||||
| PaintCurvePointToTransData(pcp, td, td2d, tdpc); | PaintCurvePointToTransData(pcp, td2d, tdpc, td, tdi); | ||||
| if (pcp->bez.f2 & SELECT) { | if (pcp->bez.f2 & SELECT) { | ||||
| td += 3; | tdi += 3; | ||||
| td2d += 3; | td2d += 3; | ||||
| tdpc += 3; | tdpc += 3; | ||||
| } | } | ||||
| else { | else { | ||||
| if (pcp->bez.f1 & SELECT) { | if (pcp->bez.f1 & SELECT) { | ||||
| td++; | tdi++; | ||||
| td2d++; | td2d++; | ||||
| tdpc++; | tdpc++; | ||||
| } | } | ||||
| if (pcp->bez.f3 & SELECT) { | if (pcp->bez.f3 & SELECT) { | ||||
| td++; | tdi++; | ||||
| td2d++; | td2d++; | ||||
| tdpc++; | tdpc++; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| Show All 23 Lines | |||||