Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/view3d_manipulator_ruler.c
| Context not available. | |||||
| #include "BKE_object.h" | #include "BKE_object.h" | ||||
| #include "BKE_gpencil.h" | #include "BKE_gpencil.h" | ||||
| #include "BKE_unit.h" | #include "BKE_unit.h" | ||||
| #include "BKE_material.h" | |||||
| #include "BKE_main.h" | |||||
| #include "DNA_object_types.h" | #include "DNA_object_types.h" | ||||
| #include "DNA_gpencil_types.h" | #include "DNA_gpencil_types.h" | ||||
| Context not available. | |||||
| static bool view3d_ruler_to_gpencil(bContext *C, wmManipulatorGroup *mgroup) | static bool view3d_ruler_to_gpencil(bContext *C, wmManipulatorGroup *mgroup) | ||||
| { | { | ||||
| // RulerInfo *ruler_info = mgroup->customdata; | // RulerInfo *ruler_info = mgroup->customdata; | ||||
| Main *bmain = CTX_data_main(C); | |||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| Object *ob = CTX_data_active_object(C); | |||||
| bGPdata *gpd; | |||||
| bGPDlayer *gpl; | bGPDlayer *gpl; | ||||
| bGPDframe *gpf; | bGPDframe *gpf; | ||||
| bGPDstroke *gps; | bGPDstroke *gps; | ||||
| bGPDpalette *palette; | |||||
| bGPDpalettecolor *palcolor; | |||||
| RulerItem *ruler_item; | RulerItem *ruler_item; | ||||
| const char *ruler_name = RULER_ID; | const char *ruler_name = RULER_ID; | ||||
| bool changed = false; | bool changed = false; | ||||
| if (scene->gpd == NULL) { | gpd = BKE_gpencil_data_addnew(CTX_data_main(C), "GPencil"); | ||||
| scene->gpd = BKE_gpencil_data_addnew("GPencil"); | gpl = BLI_findstring(&gpd->layers, ruler_name, offsetof(bGPDlayer, info)); | ||||
| } | |||||
| gpl = BLI_findstring(&scene->gpd->layers, ruler_name, offsetof(bGPDlayer, info)); | |||||
| if (gpl == NULL) { | if (gpl == NULL) { | ||||
| gpl = BKE_gpencil_layer_addnew(scene->gpd, ruler_name, false); | gpl = BKE_gpencil_layer_addnew(scene->gpd, ruler_name, false); | ||||
| gpl->thickness = 1; | gpl->thickness = 1; | ||||
| gpl->flag |= GP_LAYER_HIDE; | gpl->flag |= GP_LAYER_HIDE; | ||||
| } | } | ||||
| /* try to get active palette or create a new one */ | /* try to get active color or create a new one */ | ||||
| palette = BKE_gpencil_palette_getactive(scene->gpd); | Material *mat = BKE_gpencil_color_ensure(bmain, ob); | ||||
| if (palette == NULL) { | |||||
| palette = BKE_gpencil_palette_addnew(scene->gpd, DATA_("GP_Palette"), true); | |||||
| } | |||||
| /* try to get color with the ruler name or create a new one */ | |||||
| palcolor = BKE_gpencil_palettecolor_getbyname(palette, (char *)ruler_name); | |||||
| if (palcolor == NULL) { | |||||
| palcolor = BKE_gpencil_palettecolor_addnew(palette, (char *)ruler_name, true); | |||||
| } | |||||
| gpf = BKE_gpencil_layer_getframe(gpl, CFRA, true); | gpf = BKE_gpencil_layer_getframe(gpl, CFRA, true); | ||||
| BKE_gpencil_free_strokes(gpf); | BKE_gpencil_free_strokes(gpf); | ||||
| Context not available. | |||||
| gps->flag = GP_STROKE_3DSPACE; | gps->flag = GP_STROKE_3DSPACE; | ||||
| gps->thickness = 3; | gps->thickness = 3; | ||||
| /* assign color to stroke */ | /* assign color to stroke */ | ||||
| BLI_strncpy(gps->colorname, palcolor->info, sizeof(gps->colorname)); | gps->mat_nr = BKE_object_material_slot_find_index(ob, mat) - 1; | ||||
| gps->palcolor = palcolor; | |||||
| BLI_addtail(&gpf->strokes, gps); | BLI_addtail(&gpf->strokes, gps); | ||||
| changed = true; | changed = true; | ||||
| } | } | ||||
| Context not available. | |||||