Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_array.c
| Show First 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | static void initData(ModifierData *md) | ||||
| zero_v3(amd->offset); | zero_v3(amd->offset); | ||||
| amd->scale[0] = 1; | amd->scale[0] = 1; | ||||
| amd->scale[1] = amd->scale[2] = 0; | amd->scale[1] = amd->scale[2] = 0; | ||||
| amd->length = 0; | amd->length = 0; | ||||
| amd->merge_dist = 0.01; | amd->merge_dist = 0.01; | ||||
| amd->fit_type = MOD_ARR_FIXEDCOUNT; | amd->fit_type = MOD_ARR_FIXEDCOUNT; | ||||
| amd->offset_type = MOD_ARR_OFF_RELATIVE; | amd->offset_type = MOD_ARR_OFF_RELATIVE; | ||||
| amd->flags = 0; | amd->flags = 0; | ||||
| /* Open the first subpanel by default, it corresspnds to Relative offset which is enabled too. */ | |||||
| md->ui_expand_flag = (1 << 0) | (1 << 1); | |||||
| } | } | ||||
| static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData) | static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData) | ||||
| { | { | ||||
| ArrayModifierData *amd = (ArrayModifierData *)md; | ArrayModifierData *amd = (ArrayModifierData *)md; | ||||
| walk(userData, ob, &amd->start_cap, IDWALK_CB_NOP); | walk(userData, ob, &amd->start_cap, IDWALK_CB_NOP); | ||||
| walk(userData, ob, &amd->end_cap, IDWALK_CB_NOP); | walk(userData, ob, &amd->end_cap, IDWALK_CB_NOP); | ||||
| ▲ Show 20 Lines • Show All 743 Lines • ▼ Show 20 Lines | else if (amd->end_cap && amd->end_cap->type != OB_MESH) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| static void panel_draw(const bContext *C, Panel *panel) | static void panel_draw(const bContext *C, Panel *panel) | ||||
| { | { | ||||
| uiLayout *col; | |||||
| uiLayout *layout = panel->layout; | uiLayout *layout = panel->layout; | ||||
| PointerRNA ptr; | PointerRNA ptr; | ||||
| PointerRNA ob_ptr; | PointerRNA ob_ptr; | ||||
| modifier_panel_get_property_pointers(C, panel, &ob_ptr, &ptr); | modifier_panel_get_property_pointers(C, panel, &ob_ptr, &ptr); | ||||
| uiLayoutSetPropSep(layout, true); | uiLayoutSetPropSep(layout, true); | ||||
| uiItemR(layout, &ptr, "fit_type", 0, NULL, ICON_NONE); | uiItemR(layout, &ptr, "fit_type", 0, NULL, ICON_NONE); | ||||
| int fit_type = RNA_enum_get(&ptr, "fit_type"); | int fit_type = RNA_enum_get(&ptr, "fit_type"); | ||||
| if (fit_type == MOD_ARR_FIXEDCOUNT) { | if (fit_type == MOD_ARR_FIXEDCOUNT) { | ||||
| uiItemR(layout, &ptr, "count", 0, NULL, ICON_NONE); | uiItemR(layout, &ptr, "count", 0, NULL, ICON_NONE); | ||||
| } | } | ||||
| else if (fit_type == MOD_ARR_FITLENGTH) { | else if (fit_type == MOD_ARR_FITLENGTH) { | ||||
| uiItemR(layout, &ptr, "fit_length", 0, NULL, ICON_NONE); | uiItemR(layout, &ptr, "fit_length", 0, NULL, ICON_NONE); | ||||
| } | } | ||||
| else if (fit_type == MOD_ARR_FITCURVE) { | else if (fit_type == MOD_ARR_FITCURVE) { | ||||
| uiItemR(layout, &ptr, "curve", 0, NULL, ICON_NONE); | uiItemR(layout, &ptr, "curve", 0, NULL, ICON_NONE); | ||||
| } | } | ||||
| uiItemS(layout); | |||||
| col = uiLayoutColumn(layout, false); | |||||
| uiItemR(col, &ptr, "start_cap", 0, IFACE_("Cap Start"), ICON_NONE); | |||||
| uiItemR(col, &ptr, "end_cap", 0, IFACE_("End"), ICON_NONE); | |||||
| modifier_panel_end(layout, &ptr); | modifier_panel_end(layout, &ptr); | ||||
| } | } | ||||
| static void relative_offset_header_draw(const bContext *C, Panel *panel) | static void relative_offset_header_draw(const bContext *C, Panel *panel) | ||||
| { | { | ||||
| uiLayout *layout = panel->layout; | uiLayout *layout = panel->layout; | ||||
| PointerRNA ptr; | PointerRNA ptr; | ||||
| ▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | static void uv_panel_draw(const bContext *C, Panel *panel) | ||||
| uiLayoutSetPropSep(layout, true); | uiLayoutSetPropSep(layout, true); | ||||
| col = uiLayoutColumn(layout, true); | col = uiLayoutColumn(layout, true); | ||||
| uiItemR(col, &ptr, "offset_u", UI_ITEM_R_EXPAND, IFACE_("Offset U"), ICON_NONE); | uiItemR(col, &ptr, "offset_u", UI_ITEM_R_EXPAND, IFACE_("Offset U"), ICON_NONE); | ||||
| uiItemR(col, &ptr, "offset_v", UI_ITEM_R_EXPAND, IFACE_("V"), ICON_NONE); | uiItemR(col, &ptr, "offset_v", UI_ITEM_R_EXPAND, IFACE_("V"), ICON_NONE); | ||||
| } | } | ||||
| static void caps_panel_draw(const bContext *C, Panel *panel) | |||||
| { | |||||
| uiLayout *col; | |||||
| uiLayout *layout = panel->layout; | |||||
| PointerRNA ptr; | |||||
| modifier_panel_get_property_pointers(C, panel, NULL, &ptr); | |||||
| uiLayoutSetPropSep(layout, true); | |||||
| col = uiLayoutColumn(layout, false); | |||||
| uiItemR(col, &ptr, "start_cap", 0, IFACE_("Cap Start"), ICON_NONE); | |||||
| uiItemR(col, &ptr, "end_cap", 0, IFACE_("End"), ICON_NONE); | |||||
| } | |||||
| static void panelRegister(ARegionType *region_type) | static void panelRegister(ARegionType *region_type) | ||||
| { | { | ||||
| PanelType *panel_type = modifier_panel_register(region_type, eModifierType_Array, panel_draw); | PanelType *panel_type = modifier_panel_register(region_type, eModifierType_Array, panel_draw); | ||||
| modifier_subpanel_register(region_type, | modifier_subpanel_register(region_type, | ||||
| "relative_offset", | "relative_offset", | ||||
| "", | "", | ||||
| relative_offset_header_draw, | relative_offset_header_draw, | ||||
| relative_offset_draw, | relative_offset_draw, | ||||
| panel_type); | panel_type); | ||||
| modifier_subpanel_register(region_type, | modifier_subpanel_register(region_type, | ||||
| "constant_offset", | "constant_offset", | ||||
| "", | "", | ||||
| constant_offset_header_draw, | constant_offset_header_draw, | ||||
| constant_offset_draw, | constant_offset_draw, | ||||
| panel_type); | panel_type); | ||||
| modifier_subpanel_register( | modifier_subpanel_register( | ||||
| region_type, "object_offset", "", object_offset_header_draw, object_offset_draw, panel_type); | region_type, "object_offset", "", object_offset_header_draw, object_offset_draw, panel_type); | ||||
| modifier_subpanel_register( | modifier_subpanel_register( | ||||
| region_type, "merge", "", symmetry_panel_header_draw, symmetry_panel_draw, panel_type); | region_type, "merge", "", symmetry_panel_header_draw, symmetry_panel_draw, panel_type); | ||||
| modifier_subpanel_register(region_type, "uv", "UVs", NULL, uv_panel_draw, panel_type); | modifier_subpanel_register(region_type, "uv", "UVs", NULL, uv_panel_draw, panel_type); | ||||
| modifier_subpanel_register(region_type, "caps", "Caps", NULL, caps_panel_draw, panel_type); | |||||
| } | } | ||||
| ModifierTypeInfo modifierType_Array = { | ModifierTypeInfo modifierType_Array = { | ||||
| /* name */ "Array", | /* name */ "Array", | ||||
| /* structName */ "ArrayModifierData", | /* structName */ "ArrayModifierData", | ||||
| /* structSize */ sizeof(ArrayModifierData), | /* structSize */ sizeof(ArrayModifierData), | ||||
| /* type */ eModifierTypeType_Constructive, | /* type */ eModifierTypeType_Constructive, | ||||
| /* flags */ eModifierTypeFlag_AcceptsMesh | eModifierTypeFlag_SupportsMapping | | /* flags */ eModifierTypeFlag_AcceptsMesh | eModifierTypeFlag_SupportsMapping | | ||||
| Show All 29 Lines | |||||