Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/object/object_add.c
| Show First 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | |||||
| #include "BKE_nla.h" | #include "BKE_nla.h" | ||||
| #include "BKE_object.h" | #include "BKE_object.h" | ||||
| #include "BKE_particle.h" | #include "BKE_particle.h" | ||||
| #include "BKE_report.h" | #include "BKE_report.h" | ||||
| #include "BKE_sca.h" | #include "BKE_sca.h" | ||||
| #include "BKE_scene.h" | #include "BKE_scene.h" | ||||
| #include "BKE_screen.h" | #include "BKE_screen.h" | ||||
| #include "BKE_speaker.h" | #include "BKE_speaker.h" | ||||
| #include "BKE_workspace.h" | |||||
| #include "DEG_depsgraph.h" | #include "DEG_depsgraph.h" | ||||
| #include "DEG_depsgraph_build.h" | #include "DEG_depsgraph_build.h" | ||||
| #include "RNA_access.h" | #include "RNA_access.h" | ||||
| #include "RNA_define.h" | #include "RNA_define.h" | ||||
| #include "RNA_enum_types.h" | #include "RNA_enum_types.h" | ||||
| ▲ Show 20 Lines • Show All 327 Lines • ▼ Show 20 Lines | Object *ED_object_add_type( | ||||
| ViewLayer *view_layer = CTX_data_view_layer(C); | ViewLayer *view_layer = CTX_data_view_layer(C); | ||||
| Object *ob; | Object *ob; | ||||
| /* for as long scene has editmode... */ | /* for as long scene has editmode... */ | ||||
| if (CTX_data_edit_object(C)) | if (CTX_data_edit_object(C)) | ||||
| ED_object_editmode_exit(C, EM_FREEDATA | EM_FREEUNDO | EM_WAITCURSOR | EM_DO_UNDO); /* freedata, and undo */ | ED_object_editmode_exit(C, EM_FREEDATA | EM_FREEUNDO | EM_WAITCURSOR | EM_DO_UNDO); /* freedata, and undo */ | ||||
| /* deselects all, sets scene->basact */ | /* deselects all, sets scene->basact */ | ||||
| ob = BKE_object_add(bmain, scene, view_layer, type, name); | ob = BKE_object_add(bmain, scene, view_layer, CTX_wm_workspace(C), type, name); | ||||
| /* editor level activate, notifiers */ | /* editor level activate, notifiers */ | ||||
| ED_object_base_activate(C, view_layer->basact); | ED_object_base_activate(C, view_layer->basact); | ||||
| /* more editor stuff */ | /* more editor stuff */ | ||||
| ED_object_base_init_transform(C, view_layer->basact, loc, rot); | ED_object_base_init_transform(C, view_layer->basact, loc, rot); | ||||
| /* Ignore collisions by default for non-mesh objects */ | /* Ignore collisions by default for non-mesh objects */ | ||||
| if (type != OB_MESH) { | if (type != OB_MESH) { | ||||
| ▲ Show 20 Lines • Show All 142 Lines • ▼ Show 20 Lines | void OBJECT_OT_lightprobe_add(wmOperatorType *ot) | ||||
| ED_object_add_generic_props(ot, true); | ED_object_add_generic_props(ot, true); | ||||
| } | } | ||||
| /********************* Add Effector Operator ********************/ | /********************* Add Effector Operator ********************/ | ||||
| /* for object add operator */ | /* for object add operator */ | ||||
| static int effector_add_exec(bContext *C, wmOperator *op) | static int effector_add_exec(bContext *C, wmOperator *op) | ||||
| { | { | ||||
| WorkSpace *workspace = CTX_wm_workspace(C); | |||||
| eObjectMode initial_workspace_mode = workspace->preferred_mode; | |||||
| Object *ob; | Object *ob; | ||||
| int type; | int type; | ||||
| bool enter_editmode; | bool enter_editmode; | ||||
| unsigned int layer; | unsigned int layer; | ||||
| float loc[3], rot[3]; | float loc[3], rot[3]; | ||||
| float mat[4][4]; | float mat[4][4]; | ||||
| float dia; | float dia; | ||||
| Show All 9 Lines | if (type == PFIELD_GUIDE) { | ||||
| const char *name = CTX_DATA_(BLT_I18NCONTEXT_ID_OBJECT, "CurveGuide"); | const char *name = CTX_DATA_(BLT_I18NCONTEXT_ID_OBJECT, "CurveGuide"); | ||||
| ob = ED_object_add_type(C, OB_CURVE, name, loc, rot, false, layer); | ob = ED_object_add_type(C, OB_CURVE, name, loc, rot, false, layer); | ||||
| cu = ob->data; | cu = ob->data; | ||||
| cu->flag |= CU_PATH | CU_3D; | cu->flag |= CU_PATH | CU_3D; | ||||
| ED_object_editmode_enter(C, 0); | ED_object_editmode_enter(C, 0); | ||||
| ED_object_new_primitive_matrix(C, ob, loc, rot, mat); | ED_object_new_primitive_matrix(C, ob, loc, rot, mat); | ||||
| BLI_addtail(&cu->editnurb->nurbs, ED_curve_add_nurbs_primitive(C, ob, mat, CU_NURBS | CU_PRIM_PATH, dia)); | BLI_addtail(&cu->editnurb->nurbs, ED_curve_add_nurbs_primitive(C, ob, mat, CU_NURBS | CU_PRIM_PATH, dia)); | ||||
| if (!enter_editmode) | if (!enter_editmode) { | ||||
| ED_object_editmode_exit(C, EM_FREEDATA); | ED_object_editmode_exit(C, EM_FREEDATA); | ||||
| /* restore workspace mode */ | |||||
| workspace->preferred_mode = initial_workspace_mode; | |||||
| } | |||||
| } | } | ||||
| else { | else { | ||||
| const char *name = CTX_DATA_(BLT_I18NCONTEXT_ID_OBJECT, "Field"); | const char *name = CTX_DATA_(BLT_I18NCONTEXT_ID_OBJECT, "Field"); | ||||
| ob = ED_object_add_type(C, OB_EMPTY, name, loc, rot, false, layer); | ob = ED_object_add_type(C, OB_EMPTY, name, loc, rot, false, layer); | ||||
| BKE_object_obdata_size_init(ob, dia); | BKE_object_obdata_size_init(ob, dia); | ||||
| if (ELEM(type, PFIELD_WIND, PFIELD_VORTEX)) | if (ELEM(type, PFIELD_WIND, PFIELD_VORTEX)) | ||||
| ob->empty_drawtype = OB_SINGLE_ARROW; | ob->empty_drawtype = OB_SINGLE_ARROW; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 83 Lines • ▼ Show 20 Lines | void OBJECT_OT_camera_add(wmOperatorType *ot) | ||||
| RNA_def_property_flag(prop, PROP_HIDDEN); | RNA_def_property_flag(prop, PROP_HIDDEN); | ||||
| } | } | ||||
| /********************* Add Metaball Operator ********************/ | /********************* Add Metaball Operator ********************/ | ||||
| static int object_metaball_add_exec(bContext *C, wmOperator *op) | static int object_metaball_add_exec(bContext *C, wmOperator *op) | ||||
| { | { | ||||
| WorkSpace *workspace = CTX_wm_workspace(C); | |||||
| eObjectMode initial_workspace_mode = workspace->preferred_mode; | |||||
| Object *obedit = CTX_data_edit_object(C); | Object *obedit = CTX_data_edit_object(C); | ||||
| bool newob = false; | bool newob = false; | ||||
| bool enter_editmode; | bool enter_editmode; | ||||
| unsigned int layer; | unsigned int layer; | ||||
| float loc[3], rot[3]; | float loc[3], rot[3]; | ||||
| float mat[4][4]; | float mat[4][4]; | ||||
| float dia; | float dia; | ||||
| Show All 12 Lines | static int object_metaball_add_exec(bContext *C, wmOperator *op) | ||||
| ED_object_new_primitive_matrix(C, obedit, loc, rot, mat); | ED_object_new_primitive_matrix(C, obedit, loc, rot, mat); | ||||
| dia = RNA_float_get(op->ptr, "radius"); | dia = RNA_float_get(op->ptr, "radius"); | ||||
| ED_mball_add_primitive(C, obedit, mat, dia, RNA_enum_get(op->ptr, "type")); | ED_mball_add_primitive(C, obedit, mat, dia, RNA_enum_get(op->ptr, "type")); | ||||
| /* userdef */ | /* userdef */ | ||||
| if (newob && !enter_editmode) { | if (newob && !enter_editmode) { | ||||
| ED_object_editmode_exit(C, EM_FREEDATA); | ED_object_editmode_exit(C, EM_FREEDATA); | ||||
| /* restore workspace mode */ | |||||
| workspace->preferred_mode = initial_workspace_mode; | |||||
| } | } | ||||
| WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); | WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); | ||||
| return OPERATOR_FINISHED; | return OPERATOR_FINISHED; | ||||
| } | } | ||||
| void OBJECT_OT_metaball_add(wmOperatorType *ot) | void OBJECT_OT_metaball_add(wmOperatorType *ot) | ||||
| ▲ Show 20 Lines • Show All 60 Lines • ▼ Show 20 Lines | void OBJECT_OT_text_add(wmOperatorType *ot) | ||||
| ED_object_add_generic_props(ot, true); | ED_object_add_generic_props(ot, true); | ||||
| } | } | ||||
| /********************* Add Armature Operator ********************/ | /********************* Add Armature Operator ********************/ | ||||
| static int object_armature_add_exec(bContext *C, wmOperator *op) | static int object_armature_add_exec(bContext *C, wmOperator *op) | ||||
| { | { | ||||
| Object *obedit = CTX_data_edit_object(C); | Object *obedit = CTX_data_edit_object(C); | ||||
| WorkSpace *workspace = CTX_wm_workspace(C); | |||||
| RegionView3D *rv3d = CTX_wm_region_view3d(C); | RegionView3D *rv3d = CTX_wm_region_view3d(C); | ||||
| eObjectMode initial_workspace_mode = workspace->preferred_mode; | |||||
| bool newob = false; | bool newob = false; | ||||
| bool enter_editmode; | bool enter_editmode; | ||||
| unsigned int layer; | unsigned int layer; | ||||
| float loc[3], rot[3], dia; | float loc[3], rot[3], dia; | ||||
| bool view_aligned = rv3d && (U.flag & USER_ADD_VIEWALIGNED); | bool view_aligned = rv3d && (U.flag & USER_ADD_VIEWALIGNED); | ||||
| WM_operator_view3d_unit_defaults(C, op); | WM_operator_view3d_unit_defaults(C, op); | ||||
| if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL)) | if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL)) | ||||
| Show All 12 Lines | if (obedit == NULL) { | ||||
| BKE_report(op->reports, RPT_ERROR, "Cannot create editmode armature"); | BKE_report(op->reports, RPT_ERROR, "Cannot create editmode armature"); | ||||
| return OPERATOR_CANCELLED; | return OPERATOR_CANCELLED; | ||||
| } | } | ||||
| dia = RNA_float_get(op->ptr, "radius"); | dia = RNA_float_get(op->ptr, "radius"); | ||||
| ED_armature_edit_bone_add_primitive(obedit, dia, view_aligned); | ED_armature_edit_bone_add_primitive(obedit, dia, view_aligned); | ||||
| /* userdef */ | /* userdef */ | ||||
| if (newob && !enter_editmode) | if (newob && !enter_editmode) { | ||||
| ED_object_editmode_exit(C, EM_FREEDATA); | ED_object_editmode_exit(C, EM_FREEDATA); | ||||
| /* restore workspace mode */ | |||||
| workspace->preferred_mode = initial_workspace_mode; | |||||
| } | |||||
| WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); | WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); | ||||
| return OPERATOR_FINISHED; | return OPERATOR_FINISHED; | ||||
| } | } | ||||
| void OBJECT_OT_armature_add(wmOperatorType *ot) | void OBJECT_OT_armature_add(wmOperatorType *ot) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 1,746 Lines • Show Last 20 Lines | |||||