This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/makesrna/intern/rna_curveprofile.c
Damien Picard 9120c86c3f I18n: disambiguate and make a few more strings translatable
Those strings were at least partly disambiguated:
- Area
  - Zone
  - Measurement
- Ease
  - BBone Ease In / Out
- Back
  - Camera BG image depth
  - GP interpolate sequence
- Edge Crease
  - Theme
- Jitter
  - Brush
  - GPencil
  - Lens distorsion compositing node
- Cineon color management
  - Black
  - Gamma
  - White

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D15791
2022-08-29 16:04:03 +02:00

307 lines
11 KiB
C

/* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup RNA
*/
#include <stdio.h>
#include <stdlib.h>
#include "DNA_curve_types.h"
#include "DNA_curveprofile_types.h"
#include "RNA_define.h"
#include "rna_internal.h"
#include "BLT_translation.h"
#include "WM_api.h"
#include "WM_types.h"
#ifdef RNA_RUNTIME
# include "RNA_access.h"
# include "BKE_curveprofile.h"
/**
* Set both handle types for all selected points in the profile-- faster than changing types
* for many points individually. Also set both handles for the points.
*/
static void rna_CurveProfilePoint_handle_type_set(PointerRNA *ptr, int value)
{
CurveProfilePoint *point = ptr->data;
CurveProfile *profile = point->profile;
if (profile) {
BKE_curveprofile_selected_handle_set(profile, value, value);
BKE_curveprofile_update(profile, PROF_UPDATE_NONE);
WM_main_add_notifier(NC_GEOM | ND_DATA, NULL);
}
}
static void rna_CurveProfile_clip_set(PointerRNA *ptr, bool value)
{
CurveProfile *profile = (CurveProfile *)ptr->data;
if (value) {
profile->flag |= PROF_USE_CLIP;
}
else {
profile->flag &= ~PROF_USE_CLIP;
}
BKE_curveprofile_update(profile, PROF_UPDATE_CLIP);
}
static void rna_CurveProfile_sample_straight_set(PointerRNA *ptr, bool value)
{
CurveProfile *profile = (CurveProfile *)ptr->data;
if (value) {
profile->flag |= PROF_SAMPLE_STRAIGHT_EDGES;
}
else {
profile->flag &= ~PROF_SAMPLE_STRAIGHT_EDGES;
}
BKE_curveprofile_update(profile, PROF_UPDATE_NONE);
}
static void rna_CurveProfile_sample_even_set(PointerRNA *ptr, bool value)
{
CurveProfile *profile = (CurveProfile *)ptr->data;
if (value) {
profile->flag |= PROF_SAMPLE_EVEN_LENGTHS;
}
else {
profile->flag &= ~PROF_SAMPLE_EVEN_LENGTHS;
}
BKE_curveprofile_update(profile, PROF_UPDATE_NONE);
}
static void rna_CurveProfile_remove_point(CurveProfile *profile,
ReportList *reports,
PointerRNA *point_ptr)
{
CurveProfilePoint *point = point_ptr->data;
if (BKE_curveprofile_remove_point(profile, point) == false) {
BKE_report(reports, RPT_ERROR, "Unable to remove path point");
return;
}
RNA_POINTER_INVALIDATE(point_ptr);
}
static void rna_CurveProfile_evaluate(struct CurveProfile *profile,
ReportList *reports,
float length_portion,
float location[2])
{
if (!profile->table) {
BKE_report(reports, RPT_ERROR, "CurveProfile table not initialized, call initialize()");
}
BKE_curveprofile_evaluate_length_portion(profile, length_portion, &location[0], &location[1]);
}
static void rna_CurveProfile_initialize(struct CurveProfile *profile, int segments_len)
{
BKE_curveprofile_init(profile, (short)segments_len);
}
static void rna_CurveProfile_update(struct CurveProfile *profile)
{
BKE_curveprofile_update(profile, PROF_UPDATE_REMOVE_DOUBLES | PROF_UPDATE_CLIP);
}
#else
static const EnumPropertyItem prop_handle_type_items[] = {
{HD_AUTO, "AUTO", ICON_HANDLE_AUTO, "Auto Handle", ""},
{HD_VECT, "VECTOR", ICON_HANDLE_VECTOR, "Vector Handle", ""},
{HD_FREE, "FREE", ICON_HANDLE_FREE, "Free Handle", ""},
{HD_ALIGN, "ALIGN", ICON_HANDLE_ALIGNED, "Aligned Free Handles", ""},
{0, NULL, 0, NULL, NULL},
};
static void rna_def_curveprofilepoint(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
srna = RNA_def_struct(brna, "CurveProfilePoint", NULL);
RNA_def_struct_ui_text(srna, "CurveProfilePoint", "Point of a path used to define a profile");
prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "x");
RNA_def_property_array(prop, 2);
RNA_def_property_ui_text(prop, "Location", "X/Y coordinates of the path point");
prop = RNA_def_property(srna, "handle_type_1", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "h1");
RNA_def_property_enum_items(prop, prop_handle_type_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_CurveProfilePoint_handle_type_set", NULL);
RNA_def_property_ui_text(prop, "First Handle Type", "Path interpolation at this point");
prop = RNA_def_property(srna, "handle_type_2", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "h2");
RNA_def_property_enum_items(prop, prop_handle_type_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_CurveProfilePoint_handle_type_set", NULL);
RNA_def_property_ui_text(prop, "Second Handle Type", "Path interpolation at this point");
prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PROF_SELECT);
RNA_def_property_ui_text(prop, "Select", "Selection state of the path point");
}
static void rna_def_curveprofile_points_api(BlenderRNA *brna, PropertyRNA *cprop)
{
StructRNA *srna;
PropertyRNA *parm;
FunctionRNA *func;
RNA_def_property_srna(cprop, "CurveProfilePoints");
srna = RNA_def_struct(brna, "CurveProfilePoints", NULL);
RNA_def_struct_sdna(srna, "CurveProfile");
RNA_def_struct_ui_text(srna, "Profile Point", "Collection of Profile Points");
func = RNA_def_function(srna, "add", "BKE_curveprofile_insert");
RNA_def_function_ui_description(func, "Add point to the profile");
parm = RNA_def_float(func,
"x",
0.0f,
-FLT_MAX,
FLT_MAX,
"X Position",
"X Position for new point",
-FLT_MAX,
FLT_MAX);
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
parm = RNA_def_float(func,
"y",
0.0f,
-FLT_MAX,
FLT_MAX,
"Y Position",
"Y Position for new point",
-FLT_MAX,
FLT_MAX);
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
parm = RNA_def_pointer(func, "point", "CurveProfilePoint", "", "New point");
RNA_def_function_return(func, parm);
func = RNA_def_function(srna, "remove", "rna_CurveProfile_remove_point");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Delete point from the profile");
parm = RNA_def_pointer(func, "point", "CurveProfilePoint", "", "Point to remove");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
}
static void rna_def_curveprofile(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
PropertyRNA *parm;
FunctionRNA *func;
static const EnumPropertyItem rna_enum_curveprofile_preset_items[] = {
{PROF_PRESET_LINE, "LINE", 0, "Line", "Default"},
{PROF_PRESET_SUPPORTS, "SUPPORTS", 0, "Support Loops", "Loops on each side of the profile"},
{PROF_PRESET_CORNICE, "CORNICE", 0, "Cornice Molding", ""},
{PROF_PRESET_CROWN, "CROWN", 0, "Crown Molding", ""},
{PROF_PRESET_STEPS, "STEPS", 0, "Steps", "A number of steps defined by the segments"},
{0, NULL, 0, NULL, NULL},
};
srna = RNA_def_struct(brna, "CurveProfile", NULL);
RNA_def_struct_ui_text(srna, "CurveProfile", "Profile Path editor used to build a profile path");
prop = RNA_def_property(srna, "preset", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "preset");
RNA_def_property_enum_items(prop, rna_enum_curveprofile_preset_items);
RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_MESH);
RNA_def_property_ui_text(prop, "Preset", "");
prop = RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PROF_USE_CLIP);
RNA_def_property_ui_text(prop, "Clip", "Force the path view to fit a defined boundary");
RNA_def_property_boolean_funcs(prop, NULL, "rna_CurveProfile_clip_set");
prop = RNA_def_property(srna, "use_sample_straight_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PROF_SAMPLE_STRAIGHT_EDGES);
RNA_def_property_ui_text(prop, "Sample Straight Edges", "Sample edges with vector handles");
RNA_def_property_boolean_funcs(prop, NULL, "rna_CurveProfile_sample_straight_set");
prop = RNA_def_property(srna, "use_sample_even_lengths", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PROF_SAMPLE_EVEN_LENGTHS);
RNA_def_property_ui_text(prop, "Sample Even Lengths", "Sample edges with even lengths");
RNA_def_property_boolean_funcs(prop, NULL, "rna_CurveProfile_sample_even_set");
func = RNA_def_function(srna, "update", "rna_CurveProfile_update");
RNA_def_function_ui_description(func, "Refresh internal data, remove doubles and clip points");
func = RNA_def_function(srna, "reset_view", "BKE_curveprofile_reset_view");
RNA_def_function_ui_description(func, "Reset the curve profile grid to its clipping size");
func = RNA_def_function(srna, "initialize", "rna_CurveProfile_initialize");
parm = RNA_def_int(func,
"totsegments",
1,
1,
1000,
"",
"The number of segment values to"
" initialize the segments table with",
1,
100);
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
RNA_def_function_ui_description(func, "Set the number of display segments and fill tables");
prop = RNA_def_property(srna, "points", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "path", "path_len");
RNA_def_property_struct_type(prop, "CurveProfilePoint");
RNA_def_property_ui_text(prop, "Points", "Profile control points");
rna_def_curveprofile_points_api(brna, prop);
prop = RNA_def_property(srna, "segments", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "segments", "segments_len");
RNA_def_property_struct_type(prop, "CurveProfilePoint");
RNA_def_property_ui_text(prop, "Segments", "Segments sampled from control points");
func = RNA_def_function(srna, "evaluate", "rna_CurveProfile_evaluate");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Evaluate the at the given portion of the path length");
parm = RNA_def_float(func,
"length_portion",
0.0f,
0.0f,
1.0f,
"Length Portion",
"Portion of the path length to travel before evaluation",
0.0f,
1.0f);
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
parm = RNA_def_float_vector(func,
"location",
2,
NULL,
-100.0f,
100.0f,
"Location",
"The location at the given portion of the profile",
-100.0f,
100.0f);
RNA_def_function_output(func, parm);
}
void RNA_def_profile(BlenderRNA *brna)
{
rna_def_curveprofilepoint(brna);
rna_def_curveprofile(brna);
}
#endif